Week8 CSP-M2 A

题目描述:

相较于咕咕东,瑞神是个起早贪黑的好孩子,今天早上瑞神起得很早,刷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;
}

  

原文地址:https://www.cnblogs.com/qingoba/p/12719465.html