原题目没法复制,所以题目跳转
这一题的思路:
先预处理出三个数组能拼出的数,存放到 map
中。
查询的时候只需要看这个数是否出现在 map
里即可。
时间复杂度 ,n≤100n≤100,log v 是
map
的时间复杂度。
AC code:
#include <bits/stdc++.h>
using namespace std;
#define int long long
const int N=3e5+5;
int n,m,l,q,a[N],b[N],c[N],d[N];
map<int,int>vis;
signed main(){
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++){
vis[a[i]+b[j]+c[k]]=1;
}
}
}
cin>>q;
for(int i=1;i<=q;i++){
cin>>d[i];
if(vis[d[i]])puts("Yes");
else puts("No");
}
}
也是之前写的代码,现在发一下