您的位置:首页 > 其它

HDU-2141 can you find it?

2013-05-03 16:11 417 查看
二分检索

#include <iostream>
#include <algorithm>
#define M 505
int A[M],B[M],C[M];
int Sub[M*M];
int l,m,n;
int s,x;
int idx;
int idx_c;

bool b_search(int num)
{
int st,md,ed;
st=0;
ed=l*m-1;

while (ed>=st){
md=(st+ed)/2;
if(Sub[md]<num){
st=md+1;
continue;
}else if(Sub[md]>num){
ed=md-1;
continue;
}
return true;
}
return false;
}

int main()
{
while (std::cin>>l>>m>>n){
for(int i=0;i!=l;i++){
std::cin>>A[i];
}
for(int i=0;i!=m;i++){
std::cin>>B[i];
}
for(int i=0;i!=n;i++){
std::cin>>C[i];
}
idx=0;
for(int i=0;i!=l;i++){
for(int j=0;j!=m;j++){
Sub[idx++]=A[i]+B[j];
}
}
std::sort(Sub,Sub+m*l);
std::cin>>s;

std::cout<<"Case "<<++idx_c<<":"<<std::endl;
for(int i=0;i!=s;i++){
std::cin>>x;
int j;
for( j=0;j!=n;j++){
if(b_search(x-C[j])){
std::cout<<"YES"<<std::endl;
break;
}
}
if(j==n){
std::cout<<"NO"<<std::endl;
}
}

memset(A,0,sizeof(A));
memset(B,0,sizeof(B));
memset(C,0,sizeof(C));
memset(Sub,0,sizeof(Sub));
}
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: