hdu 2141 二分查找,三个数相加
来源:互联网 发布:网络品牌策略研究论文 编辑:程序博客网 时间:2024/05/18 09:50
计算A[i]+B[j]+C[k]=x
转换为A[i]+B[i]=x-C[k] ,这样在A[i]+B[i]中二分查找,x-C[k] ,不会超时。
1 #include<iostream> 2 #include<stdio.h> 3 #include<string> 4 #include<string.h> 5 #include<algorithm> 6 7 using namespace std; 8 int a[505],b[505],c[505]; 9 int sab[250005];10 bool Bi_Search(int a[],int n,int b)11 {12 int l=0;13 int r=n-1;14 int mid;15 while(l<=r)16 {17 mid=(l+r)>>1;18 if(a[mid]==b)19 return 1;20 else if(a[mid]>b)21 r=mid-1;22 else23 l=mid+1;24 }25 return 0;26 }27 int main()28 {29 int L,M,N;30 int i,j,k;31 int s;32 int q,con=1;33 34 while(cin>>L>>M>>N)35 {36 for( i=0;i<L;i++)37 cin>>a[i];38 for( j=0;j<M;j++)39 cin>>b[j];40 for( k=0;k<N;k++)41 cin>>c[k];42 for(k=0,i=0;i<L;i++)43 for(j=0;j<M;j++)44 {45 sab[k++]=a[i]+b[j];46 }47 sort(sab,sab+k);48 49 cin>>s;50 cout<<"Case "<<con++<<":"<<endl;51 while(s--)52 {53 cin>>q;54 for(j=0;j<N;j++)55 {56 if(Bi_Search(sab,k,q-c[j]))57 break;58 }59 if(j==N)60 cout<<"NO"<<endl;61 else62 cout<<"YES"<<endl;63 }64 }65 return 0 ;66 }
0 0
- hdu 2141 二分查找,三个数相加
- 三个数相加
- hdu 2141 二分查找
- hdu 2141 二分查找
- HDU 2141 二分查找
- HDU 2141 二分查找
- HDU 2141 二分查找
- 二分查找(HDU 2141 )
- HDU-2141(二分查找)
- 三个数相加只用一个加号
- HDU 5432 Pyramid Split(浮点数二分查找)
- HDU(2057)十六进制数相加
- hdu 1753大小数相加
- HDU-2141(二分查找_创新)
- hdu 2141(二分查找,合并数组)
- hdu 2141 枚举后 二分查找
- hdu 1969 二分查找
- HDU-2199 二分查找
- 模二加法
- 二分查找
- hdu 2199 二分法求单调函数方程的解
- hdu1575 二分+矩阵求幂
- sort()排序
- hdu 2141 二分查找,三个数相加
- hdu 1969 二分+精度
- hdu 1022 (栈)STL容器的应用
- 新人报到
- hdu 1509 1873()病人要看病 优先队列(符号重载)
- hdu 1381 map(映射)
- hdu 1106 字符串处理
- 初识kmp hdu 1686
- kmp hdu 3336 下标从1开始