众所周知,在互联网上有很多话是不好直接说出来的,不过一些模糊的图片仍然能让网友看懂你在说什么。然而对这种言论依然一定要出重拳,所以请你实现一个简单的匹配算法。
现在我们采集了原图的一些特征数据,由 N 个小于 255 的非负整数组成,假设对于给定的若干张由 Mi 个同样小于 255 的非负整数组成的新图的特征数据,每个数据都可以由原图中任意四个不同数据的平均值计算而来,则称新图为原图的相似图片。对于给出的数据,请你判断是不是相似图片。
注意,不同数据指的并非是数据的值不同,而是不能取同一个数据多次。对于两个相同值的数据,如果给出两次,则可以取两次。
输入格式:
输入第一行是两个整数 N,K (1 ≤ N ≤ 50, 1 ≤ K ≤ 200),表示采集的原图的特征数据个数和新图的张数。
接下来一行为 N 个小于 255 的非负整数,表示原图的特征数据。
最后的 K 行,每行第一个数是 Mi (1 ≤ Mi ≤ 200),表示新图的特征数据个数。然后是 Mi 个小于 255 的非负整数,表示新图的特征数据。
输出格式:
对于每一张新图,如果为相似图片,则在一行中输出 Yes,否则输出 No。
输入样例:
输出样例:
#include<bits/stdc++.h>
using namespace std;
int main()
{
int flag;
int a1,a2,a3,a4;
int n,k;
int i,j,m;
cin>>n>>k;
int a[n];
int ans[20020]={0};
for(i=0;i<n;i++){
cin>>a[i];
}
for(a1=0;a1<n;a1++){
for(a2=a1+1;a2<n;a2++){
for(a3=a2+1;a3<n;a3++){
for(a4=a3+1;a4<n;a4++){
int sum=a[a1]+a[a2]+a[a3]+a[a4];
ans[sum]=1;
}
}
}
}
for(i=0;i<k;i++){
cin>>j;
int b[j];
flag=1;
for(m=0;m<j;m++){
cin>>b[m];
if(ans[b[m]*4]!=1) flag=0;
}
if(flag==1) cout<<"Yes"<<endl;
else cout<<"No"<<endl;
}
return 0;
}