Codeforces 714B. Filya and Homework

题目链接: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 }
原文地址:https://www.cnblogs.com/Ash-ly/p/5874337.html