SDU程序设计思维CSP-M2
A-HRZ的序列
Description
Sample
Idea
题意:用一个K,对于一个序列中的数要么加K,要么减K,要么不变,显然这表明这个序列不重复出现的数的个数最多三个。
首先将序列的数都插入set中,set保留不重复的数,如果set中的数超过三个那么必然不存在符合要求的K,如果set中的数只有两个或一个那么必然存在这样的K。在set中元素个数等于三个的情况下,欲K存在,那个三个数min、mid、max要满足2*mid=min+max,这里用迭代器获取这三个数进行判断即可。
Summary
多组数据!!set要清空!!!
由于没有清空set,爆零了很惨
这题比较简单,基本思路就是用set记录每组序列中不重复的数。
Codes
#include <iostream>
#include <set>
using namespace std;
int t;
int n;
int main()
{
cin >> t;
while (t--) {
set<long long> a;
cin >> n;
for (int i = 0; i < n; i++)
{
long long m;
cin >> m;
a.insert(m);
}
if (a.size() > 3)printf("NO\n");
else if (a.size() < 3)printf("YES\n");
else {
set<long long>::iterator it;
it = a.begin();
long long ans = 0;
ans += *it;
it++; it++;
ans += *it;
it--;
if (ans == *it * 2)printf("YES\n");
else printf("NO\n");
}
}
}