codeforces (C++ Doremy‘s Paint 3)

题目: 

c10b3705881242d4be4ec774702478cd.png f1f2db08c73d4f65b1a05a13c5b56a9f.png

翻译:

c86da8720a8f496ca15a915f9b62cf9e.jpeg 

思路:

 1、题目意思:将数组中的数进行排列,任意相邻两个数的和都相等,才能说这个数组为好。一下分三种情况讨论。

 

2、当数组中有三种及三种以上的数字,那任意相邻两个数的和都相等必然无法成立。

 

3、当数组中只有一种数字的时候,则必然是好数组。

 

4、当数组中有两种数字就统计两个数字出现的个数,个数绝对值差1或者0,即可以排列形成好数组。

代码: 

#include<iostream>
#include<map>
#include<cmath>
using namespace std;
int main()
{
	int t;
	cin >> t;
	while (t--)
	{
		int n;
		cin >> n;
		map<int,int>mp ;
		int flag = 0;
		for (int i = 0; i < n; i++)
		{
			int tep;
			cin >> tep;
			mp[tep]++;
		}
		if (mp.size() > 2)
			cout << "NO" << endl;
        else if(mp.size()==1)
            cout<< "YES" << endl;
		else if(mp.size()==2)
		{
			int a[2],k=0;
			for (auto i : mp)
			{
				a[k++] = i.second;
			}
			flag = abs(a[0] - a[1]);
			if (flag == 1||flag==0)
				cout << "YES" << endl;
			else
				cout << "NO" << endl;
		}
	}
}

结果: 23466eee5e4741c587b6262effb12ab8.png

 

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值