Codeforces (思维题) #803 (Div. 2). C. 3SUM Closure
原题链接
简单
作者:
生在逢时
,
2022-07-06 22:32:53
,
所有人可见
,
阅读 290
含三个正数、含三个负数返回NO
不符合条件返回NO
#include <iostream>
#include <vector>
#include <algorithm>
using namespace std;
int main()
{
int t;
scanf("%d", &t);
while (t -- )
{
int n;
scanf("%d", &n);
vector<int> a(n);
int jg1 = 0, jg2 = 0;
for (int i = 0; i < n; i ++ )
{
scanf("%d", &a[i]);
if (a[i] > 0) jg1 ++;
else if (a[i] < 0) jg2 ++;
}
if (jg1 >= 3 || jg2 >= 3) {puts("No"); continue;}
else
{
vector<int> q;
int st = 0;
for (int i = 0; i < n; i ++ )
{
if (a[i] == 0)
{
if (!st) q.push_back(a[i]), st = 1;
else continue;
}
else q.push_back(a[i]);
}
st = 1;
int len = q.size();
for (int i = 0; i < len; i ++ )
for (int j = i + 1; j < len; j ++ )
for (int k = j + 1; k < len; k ++ )
if (find(q.begin(), q.end(), q[i] + q[j] + q[k]) == q.end()) {st = 0; break;}
if (st) puts("Yes");
else puts("No");
}
}
return 0;
}