题目链接: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) 那么这个数组里所有数也会相等. 如果这个数组里的数全部相等, 则不用变化就好, 上述三种情况满足其一就可以满足题意.
代码:
1 #include <bits/stdc++.h> 2 3 using namespace std; 4 typedef long long LL; 5 const int MAXN = 100000; 6 int arv[MAXN + 3]; 7 8 int main() { 9 ios_base::sync_with_stdio(0); cin.tie(0); 10 int n; cin >> n; 11 for(int i = 0; i < n; i++) cin >> arv[i]; 12 sort(arv, arv + n); 13 int jud[MAXN + 3], len = 0; 14 jud[len++] = arv[0]; 15 for(int i = 1; i < n; i++) if(arv[i] != arv[i - 1]) jud[len++] = arv[i]; 16 if(len == 1 || len == 2 || (len == 3 && jud[2] + jud[0] == jud[1] * 2) ) cout << "YES" << endl; 17 else cout << "NO" << endl; 18 return 0; 19 }
时间: 2024-10-15 15:46:28