题意
给定四个数列,问前三个数列中各取一个数所构成的和能否等于第四个数列中的数。
思路
首先看一看数据范围,发现前三个数列中含有的数的个数都小于等于 100 100 100, 所以我们可以把前三个数列中能构成的和都求出来,最后再依次对照能否构成数列四中的数,这里可以使用 map 来记录。
AC 代码
#include<bits/stdc++.h>
using namespace std;
int a[105],b[105],c[105],x[200005];
map<int,int> mp;
int main()
{
int n,m,l,q;
cin>>n;
for(int i=1;i<=n;i++)
{
cin>>a[i];
}
cin>>m;
for(int i=1;i<=m;i++)
{
cin>>b[i];
}
cin>>l;
for(int i=1;i<=l;i++)
{
cin>>c[i];
}
for(int i=1;i<=n;i++)
{
for(int j=1;j<=m;j++)
{
for(int k=1;k<=l;k++)
{
int o=a[i]+b[j]+c[k];
mp[o]++;
}
}
}
cin>>q;
for(int i=1;i<=q;i++)
{
cin>>x[i];
}
for(int i=1;i<=q;i++)
{
if(mp[x[i]]!=0)
{
cout<<"Yes\n";
}
else
{
cout<<"No\n";
}
}
return 0;
}