您的位置:首页 > 其它

Can you find it?

2013-02-26 21:06 411 查看
http://acm.hdu.edu.cn/showproblem.php?pid=2141

View Code

#include<iostream>
#include<cstdlib>
using namespace std ;
#define maxn 505
int a[maxn], b[maxn], c[maxn] ;
int ab[maxn*maxn] ;
int cmp(const void *a, const void *b)
{
return *(int *)a - *(int *)b ;
}
int find(int n, int len)
{
int min, max, mid ;
min = 0 ;
max = len -1 ;
while(min<=max)
{
mid = (min+max)/2 ;
if(ab[mid]==n)
return 1 ;
if(ab[mid]<n)
min = mid + 1  ;
if(ab[mid] >n)
max = mid - 1 ;
}
return 0 ;
}
int main()
{
int i, j, k , x, s ;
int l, n, m ;
int times = 1 ;
while(cin>>l>>n>>m)
{
int num = 0 ;
for(i=0; i<l; i++)
cin>>a[i] ;
for(j=0; j<n; j++)
cin>>b[j] ;
for(k=0; k<m; k++)
cin>>c[k] ;
for(i=0; i<l; i++)
for(j=0; j<n; j++)
{
ab[num++] = a[i] + b[j] ;
}
qsort(ab, num, sizeof(ab[0]), cmp) ;
cout<<"Case "<<times++<<":"<<endl ;
cin>>s ;
while(s--)
{
cin>>x ;
int flag = 1 ;
for(k=0; k<m; k++)
{
if(find(x-c[k],num)==1)
{
flag = 0 ;
break ;
}
}
if(flag==0)
cout<<"YES"<<endl ;
else
cout<<"NO"<<endl ;
}
}
return 0 ;
}


输入有三个集合,要先合并两个为一,然后再对这个
合并出来的集合进行二分
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: