二分
用二分函数很好写
#include<stdio.h>
#include<iostream>
#include<string.h>
#include<algorithm>
using namespace std;
const int maxn=250000,inf=0x3f3f3f3f;
long long num[maxn];
long long a[505];
long long b[505];
long long c[505];
int l,n,m;
int step=0;
int main()
{
while(~scanf("%d%d%d",&l,&n,&m))
{
for(int i=1; i<=l; i++)
{
scanf("%lld",&a[i]);
}
for(int i=1; i<=n; i++)
{
scanf("%lld",&b[i]);
}
for(int i=0; i<m; i++)
{
scanf("%lld",&c[i]);
}
int k=0;
for(int i=1; i<=l; i++)
{
for(int j=1; j<=n; j++)
{
num[++k]=a[i]+b[j];
}
}
sort(num+1,num+1+k);
int t;
scanf("%d",&t);
long long x;
printf("Case %d:\n",++step);
while(t--)
{
scanf("%lld",&x);
int flag=0;
for(int i=0;i<m;i++)
{
long long xx=x-c[i];
if(binary_search(num+1,num+1+k,xx))
{
flag=1;
break;
}
}
if(flag)
printf("YES\n");
else
printf("NO\n");
}
}
}