标签:
Description
Input
Output
Sample Input
Sample Output
#include <iostream>
#include<cstdio>
#include<cmath>
#include<algorithm>//排序的头文件
using namespace std;
int a[501],b[501],c[501],d[501*501];//合并数组的范围应为之前数组的平方
int main()
{
int l,n,m,i,j,k,p,y,s,x;
s=0;
while(scanf("%d%d%d",&l,&n,&m)!=EOF)
{
for(i=0;i<l;i++)
scanf("%d",&a[i]);
for(i=0;i<n;i++)
scanf("%d",&b[i]);
for(i=0;i<m;i++)
scanf("%d",&c[i]);
sort(c,c+m);//将数组进行排序
int q=0;
for(j=0;j<n;j++)
for(k=0;k<m;k++)
d[q++]=a[j]+b[k];//将前两个数组求和,合并成为一个数组
sort(d,d+q);
scanf("%d",&p);
printf("Case %d:\n",++s);//此处少写了换行符
for(i=0;i<p;i++)
{
scanf("%d",&x);
int flag=0;//标记
for(k=0;k<m;k++)
{
y=x-c[k];
int le,r,mid;
le=0;//左端点
r=q-1;//右端点,刚写错了,将区间的范围缩小了
while(le<=r)//二分法核心代码
{
mid=(le+r)/2;//中区间
if(y==d[mid])
{
flag=1;
break;//终止判断
}
if (d[mid]<y)
le=mid+1;
else r=mid-1;
}
if(flag==1) break;//如果有一个合法的y就结束循环
}
if(flag)
printf