标签:
Input
Output
Sample Input
Sample Output
/*
把两个加在一起,和第三个二分
换下顺序就A了。。否则TLE
*/
#include <cstdio>
#include <cstring>
#include <algorithm>
using namespace std;
const int MAX = 500 + 10;
int L[MAX], N[MAX], M[MAX];
int LN[1000100],Ln[1000100];
int l, n, m, q;
int main()
{
int cas = 0;
while(~scanf("%d%d%d", &l, &n, &m)){
for(int i = 1; i <= l; i++)
scanf("%d", &L[i]);
for(int i = 1; i <= n; i++)
scanf("%d", &N[i]);
for(int i = 1; i <= m; i++)
scanf("%d", &M[i]);
int cout = 1;
for(int i = 1; i <= l; i++){
for(int j = 1; j <= n; j++){
LN[cout++] = L[i] + N[j];
}
}
sort(LN + 1, LN + cout);
int cout1 = 1;
for(int i = 1; i < cout; i++){
if(LN[i] != LN[i+1]) ;
Ln[cout1++] = LN[i];
}
scanf("%d", &q);
cas++;
printf("Case %d:\n", cas);
int p;
for(int i = 1; i <= q; i++){
scanf("%d", &p);
int flag = 0;
for(int j = 1; j <= m; j++){
int ll = 1, rr = cout1 - 1;
while(ll <= rr){
int mid = (ll + rr) >> 1;
if(Ln[mid] + M[j] == p){
// printf("%d %d\n", mid, M[j]);
flag = 1;
break;
}
else if(Ln[mid] + M[j] > p)
rr = mid - 1;
else ll = mid + 1;
}
if(flag == 1) break;
}
if(flag == 1) printf("YES\n");
else printf("NO\n");
}
}
return 0;
}
标签:
原文地址:http://www.cnblogs.com/zero-begin/p/4694140.html