题意:给你a和b,小X有n个互不相同的整数: p1,p2,...,pn 。他想把这些整数分到两个集合A和B里边。但是要符合下面两个条件。
· 如果x属于A,那么a-x也肯定属于A。
· 如果x属于A,那么a-x也肯定属于A。
· 如果x属于B,那么b-x也肯定属于B。
思路:
如果a-x,b-x都不存在那么就是A,B都不能放,no。
如果a-x,b-x只存在其中一个,那就是能放。
如果a-x,b-x都存在,如果 x 在 A 中,那么 b-x 一定不在 B 中,因为数唯一,所以 b-x 只能在 A 中,也就是说必须存在 a-(b-x),如果不存在就是no,同理得如果 x 在 B 中,则必须存在 b-(a-x)。
代码:
#include<bits/stdc++.h>
using namespace std;
const int maxn = 1e5+5;
int v[maxn], n, a, b;
set<int> s;
int main(void)
{
while(cin >> n >> a >> b)
{
s.clear();
for(int i = 1; i <= n; i++)
scanf("%d", &v[i]), s.insert(v[i]);
bool no = 0;
for(int i = 1; i <= n; i++)
{
int tmp1 = a-v[i];
int tmp2 = b-v[i];
if(s.find(tmp1) == s.end() && s.find(tmp2) == s.end()) no = 1;
if(s.find(tmp1) != s.end() && s.find(tmp2) != s.end())
{
if(s.find(a-tmp2) == s.end() && s.find(b-tmp1) == s.end()) no = 1;
}
}
puts(no ? "NO" : "YES");
}
return 0;
}