hdu 2141 二分搜索
2013-04-21 21:54
387 查看
http://acm.hdu.edu.cn/showproblem.php?pid=2141
/*在排序后的序列中搜索某个确定的值*/
题目大意:在序列a,b,c中分别找一个值,满足a[i]+b[j]+c[k]=X;
先将a,b合并为ab,然后用二分搜索在数组ab中查找X-c[k];
/*在排序后的序列中搜索某个确定的值*/
题目大意:在序列a,b,c中分别找一个值,满足a[i]+b[j]+c[k]=X;
先将a,b合并为ab,然后用二分搜索在数组ab中查找X-c[k];
#include<iostream> #include<stdio.h> #include<string.h> #include<stdlib.h> #define Max 505 using namespace std; int ab[Max*Max],a[Max],b[Max],c[Max]; int L,M,N,S,X,K; int cmp(const void* a,const void* b) { return *(int*)a-*(int*)b; } int search(int p) //二分搜索 { int first=0,last=K-1,middle; while(first<=last){ middle=(last+first)/2; if(ab[middle]==p) return 1; else if(ab[middle]<p) first=middle+1; else last=middle-1; } return 0; } int main() { int i,j,flag=0; while(scanf("%d%d%d",&L,&M,&N)!=EOF){ for(i=0;i<L;i++)scanf("%d",&a[i]); for(i=0;i<M;i++)scanf("%d",&b[i]); for(i=0;i<N;i++)scanf("%d",&c[i]); for(i=0,K=0;i<L;i++){ for(j=0;j<M;j++){ ab[K++]=a[i]+b[j]; } } qsort(ab,K,sizeof(ab[0]),cmp); qsort(c,N,sizeof(c[0]),cmp); scanf("%d",&S); printf("Case %d:\n",++flag); for(i=0;i<S;i++){ scanf("%d",&X); for(j=0;j<N;j++){ if(search(X-c[j])){ printf("YES\n"); break; } } if(j==N) printf("NO\n"); } } return 0; }
相关文章推荐
- HDU-2141(二分搜索)
- hdu 2141 二分搜索
- 简单搜索练习(一)二分入门 HDU 2141 Can you find it?POJ 2785 4 Value whose Sum is 0
- hdu 2141 二分搜索
- HDU 2141(搜索题,二分)
- HDU - 2141:Can you find it?(二分搜索)
- HDU 1880 魔咒词典 (二分搜索)
- HDU 2141 Can you find it?二分
- HDU-2141(二分查找)
- hdu 2141 二分查找
- 题解: HDU 4004 The Frog's Games (二分搜索)
- hdu 2199 Can you solve this equation?(二分搜索)
- HDU 2141 Can you find it?(二分)
- hdu 2289 cup(二分搜索)
- HDU 2141 哈希表或者二分
- HDU 1969(搜索题,二分)
- hdu 2141(二分)
- HDU2141 二分查找
- HDU - 2141 Can you find it?(二分)
- HDU 2141 二分