题目描述:
相较于咕咕东,瑞神是个起早贪黑的好孩子,今天早上瑞神起得很早,刷B站时看到了一个序列a,他对这个序列产生了浓厚的兴趣,他好奇是否存在一个数K ,使得一些数加上K,一些数减去 K,一些数不变,使得整个序列中所有的数相等,其中对于序列中的每个位置上的数字,至多只能执行一次加运算或减运算或是对该位置不进行任何操作。由于瑞神只会刷B站,所以他把这个问题交给了你!
输入输出规模及约定:
输入第一行是一个正整数T表示数据组数。 接下来对于每组数据,输入的第一个正整数N表示序列 的长 度,随后一行有N个整数,表示序列 a。
输出共包含T行,每组数据输出一行。对于每组数据,如果存在这样的K,输出"YES",否则输出“NO”。 (输出不包含引号)
思路:
很显然,如果不同的数超过了四个,就不可以。
如何判断一共有多少个不同的数?用桶?
更好的办法是用集合。
代码:
#include <cstdio> #include <iostream> #include <set> #include <vector> #include <algorithm> typedef long long ll; using namespace std; set<ll> S; vector<ll> v; int main() { int T; cin>>T; while(T--) { S.clear(); v.clear(); int n; cin>>n; for(int i=1;i<=n;i++) { ll val; scanf("%lld",&val); S.insert(val); } if(S.size()>3) cout<<"NO"<<endl; else if(S.size()==1||S.size()==2) cout<<"YES"<<endl; else { for(auto x:S) v.push_back(x); sort(v.begin(),v.end()); if(v[1]-v[0]==v[2]-v[1]) cout<<"YES"<<endl; else cout<<"NO"<<endl; } } return 0; }