dddd,签到题了属于是,但是比赛的时候还是做错了
正确的写法应该是vis[a[i] + a[j] + a[k] + a[l]] = true
,然后判断的时候if(vis[x] * 4)
但比赛的时候我写的是vis[(a[i] + a[j] + a[k] + a[l]) / 4] = true
,判断写的是if(vis[x])
如果非要像我那样写也可以,只不过要用哈希表了,可以用map<double,bool>
#include <iostream>
#include <cstdio>
#include <algorithm>
#include <cstring>
using namespace std;
const int N = 60;
const int M = 2000;
int a[N];
bool vis[M];
int main()
{
int n,m;
cin >> n >> m;
for(int i = 0;i < n;i ++)
cin >> a[i];
for(int i = 0;i < n;i ++)
for(int j = i + 1;j < n;j ++)
for(int k = j + 1;k < n;k ++)
for(int l = k + 1;l < n;l ++)
vis[a[i] + a[j] + a[k] + a[l]] = true;
while(m --)
{
int k;
cin >> k;
bool flag = true;
while(k --)
{
int x;
cin >> x;
if(!vis[x * 4])
flag = false;
}
if(flag)
puts("Yes");
else
puts("No");
}
return 0;
}