题目链接:http://codeforces.com/problemset/problem/714/B
题意:
给你一个含有 n 个数的数组, 问你是否存在一个 x, 使得这个数组中的某些数加上 x, 某些数减去 x 后所有数都相等.
思路:
如果这个数组里面不相等的数大于 3 个那么 x 就不可能存在. 否则如果这个数组里仅有三个数不一样且设为 a, b, c(a < b < c), 则还必须满足 b - a == c - b. 使得所有等于 a 的数加上 b - a 变为 b, 所有等于 c 的数减去 c - b 也变为 b, 则可以让所有数相等. 如果这个数组里面仅有两个数不一样且设为 a, b, 那么给所有为 a 的数加 (b - a) 或者给所有值为 b 的数减去(b - a) 那么这个数组里所有数也会相等. 如果这个数组里的数全部相等, 则不用变化就好, 上述三种情况满足其一就可以满足题意.
代码:
#include <bits/stdc++.h> using namespace std;
typedef long long LL;
const int MAXN = ;
int arv[MAXN + ]; int main() {
ios_base::sync_with_stdio(); cin.tie();
int n; cin >> n;
for(int i = ; i < n; i++) cin >> arv[i];
sort(arv, arv + n);
int jud[MAXN + ], len = ;
jud[len++] = arv[];
for(int i = ; i < n; i++) if(arv[i] != arv[i - ]) jud[len++] = arv[i];
if(len == || len == || (len == && jud[] + jud[] == jud[] * ) ) cout << "YES" << endl;
else cout << "NO" << endl;
return ;
}