cspM2-1

题目要求

HRZ的序列
相较于咕咕东,瑞神是个起早贪黑的好孩子,今天早上瑞神起得很早,刷B站时看到了一个序列 ,他对 这个序列产生了浓厚的兴趣,他好奇是否存在一个数 ,使得一些数加上K ,一些数减去K ,一些数不变,使得整个序列中所有的数相等,其中对于序列中的每个位置上的数字,至多只能执行一次加运算或 减运算或是对该位置不进行任何操作。由于瑞神只会刷B站,所以他把这个问题交给了你!

输入格式
输入第一行是一个正整数t 表示数据组数。 接下来对于每组数据,输入的第一个正整数 n表示序列a 的长 度,随后一行有 n个整数,表示序列 a。
输出格式

输出共包含 t行,每组数据输出一行。对于每组数据,如果存在这样的K,输出"YES",否则输出“NO”。 (输出不包含引号)

求解思路
  • 读入n个数,使用容器来记录出现过的不重复的数。从vector的0元素开始找到末尾,若不存在当前数,则压入容器,否则,不做处理。
  • 读完全部的n个数后(注意,因为是边读边判断,一定是都读进来,不能找到不满足就break,这样后面的数不读进来,就会归到下一组数据,导致错误)判断不同的元素个数
  • 若当前容器中元素数目大于3,一定不存在K
  • 若小于3,一定存在K.
  • 若等于3,将vector中元素存入数组,进行sort排序,若(con[1] - con[0]) = (con[2] - con[1]),则存在K,否则,不存在K.
  • 这里更简单是直接用set存储
代码
#include
#include
#include
#include
#include
#include
#include
using namespace std;

vector<long long> v;
long long con[3];
int main()
{
	int t;
	cin >> t;
	for (int i = 0; i < t; i++)
	{
		int n;
		cin >> n;
		v.clear();
		for (int j = 0; j < n; j++)
		{
			long long temp;
			cin >> temp;
			bool in = false;
			for (int k = 0; k < v.size(); k++)
			{
				if (v[k] == temp)
					in = true;
			}
			if (in == false)
				v.push_back(temp);
			if (v.size() > 3)
			{
				//cout << "NO" << endl;
				//break;//这里不能break,要都读进来啊,不然下一次就是接着读了。
			}
		}
		if (v.size() > 3)
		{
			cout << "NO" << endl;
		}
		if (v.size() == 3)
		{
			for (int p = 0; p < 3; p++)
			{
				con[p] = v[p];
			}
			sort(con, con + 3);
			if ((con[1] - con[0]) == (con[2] - con[1]))
			{
				cout << "YES" << endl;
			}
			else
			{
				cout << "NO" << endl;
			}
		}
		if (v.size() < 3)
		{
			cout << "YES" << endl;
		}
	}
}

你可能感兴趣的:(cspM2-1)