hdu 2141(二分)
来源:互联网 发布:linux如何设置双屏显示 编辑:程序博客网 时间:2024/06/05 01:56
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=2141
最近想做做水题找找感觉。。orz,水题也不好切啊。。。一开始没分析,直接暴力,可想而知,TLE。。。然后就用了二分。。。wa了好几次。。
View Code
1 #include<iostream> 2 #include<algorithm> 3 const int MAXN=507; 4 using namespace std; 5 __int64 a[MAXN],b[MAXN],c[MAXN],d[MAXN*MAXN]; 6 7 int Binary_Search(__int64 number,int low,int high){ 8 while(low<=high){ 9 int mid=(low+high)/2;10 if(d[mid]==number)return 1;11 else if(d[mid]>number)high=mid-1;12 else low=mid+1;13 }14 return 0;15 }16 17 18 int main(){19 int L,N,M;20 int _case=1;21 while(~scanf("%d%d%d",&L,&N,&M)){22 for(int i=0;i<L;i++)scanf("%I64d",&a[i]);23 for(int i=0;i<N;i++)scanf("%I64d",&b[i]);24 for(int i=0;i<M;i++)scanf("%I64d",&c[i]);25 int l=0;26 for(int i=0;i<L;i++){27 for(int j=0;j<N;j++){28 d[l++]=a[i]+b[j];29 }30 }31 sort(c,c+M);32 sort(d,d+l);33 int s;34 scanf("%d",&s);35 printf("Case %d:\n",_case++);36 while(s--){37 __int64 x;38 scanf("%I64d",&x);39 if(x<c[0]+d[0]||x>c[M-1]+d[l-1]){40 printf("NO\n");41 continue;42 }43 int flag=0;44 for(int i=0;i<M;i++){45 __int64 tmp=x-c[i];46 if(Binary_Search(tmp,0,l-1)){47 flag=1;48 break;49 }50 }51 if(flag){52 printf("YES\n");53 }else 54 printf("NO\n");55 }56 }57 return 0;58 }59 60 61 62
0 0
- hdu 2141(二分)
- hdu 2141 (二分+排序)
- 二分查找(HDU 2141 )
- HDU-2141(二分查找)
- HDU 2141(搜索题,二分)
- hdu 2141(二分查找,合并数组)
- HDU 2141 二分
- hdu 2141 二分搜索
- hdu 2141 二分查找
- hdu 2141 二分查找
- hdu 2141 二分
- HDU 2141二分小解
- HDU 2141 二分查找
- HDU 2141 二分查找
- HDU 2141 二分查找
- hdu 2141 二分 ll
- hdu 1895(二分)
- hdu 1551(二分)
- Fleury(佛罗莱)算法求欧拉回路的学习
- hdu 2100(26进制)
- hdu 2119(最大匹配)
- hdu 2117(小数点后m位)
- hdu 2181(哈密尔顿环)
- hdu 2141(二分)
- hdu 2116(判断是否溢出)
- hdu 1725(Find minimal sum)
- hdu 2188
- ListView去掉自带的线条和滚动条
- hdu 4501(背包)
- hdu 4504(背包最优方案数)
- hdu 4502
- hdu 4508(完全背包)