题目
样例输入
2
5
1 2 3 4 5
5
1 2 3 4 5
样例输出
NO
NO
思路
申请了一个大小为3的数组,根据输入,将大小不同的三个数存入数组。
如果有大小不同的第四个数,则不能通过加、减k的方法将全部数值化为相同的。
如果输入序列中有三个大小不同的数,判断max-mid=mid-min?如果不相等,则也无法实现。
若果输入序列中数字大小只有两种或一种,则一定可以将全部数值转化为相同数值。
代码
#include<iostream>
#include<algorithm>
using namespace std;
int main()
{
int n, m;
cin >> n;
for (int i = 0; i < n; i++)
{
bool is = 1;
cin >> m;
long long x;
long long a[3];
for (int k = 0; k < 3; k++)
a[k] = -1;
for (int j = 0; j < m; j++)
{
cin >> x;
if (!is) continue;
for (int k = 0; k < 3; k++)
{
if (a[k] == -1)
{
a[k] = x;
break;
}
else if (a[k] == x) break;
else if (k == 2 && a[k] != x)
{
is = 0;
break;
}
}
}
int num = 0;
for (int k = 0; k < 3; k++)
if (a[k] != -1)
num++;
if (num == 3)
{
long long maxx = max(max(a[0], a[1]), a[2]);
long long minn = min(min(a[0], a[1]), a[2]);
long long mid;
for (int k = 0; k < 3; k++)
{
if (a[k] != maxx && a[k] != minn)
{
mid = a[k];
break;
}
}
if (maxx - mid != mid - minn) is = 0;
}
if (is) cout << "YES" << endl;
else cout << "NO" << endl;
}
system("Pause");
}
总结
csp中测试真的很重要啊!!像我这种有着蜜汁自信的人就因为一个小错误爆零...
(所以我到底是哪里来的自信...只过了样例就敢交)