首页 > 代码库 > Codeforces 714B. Filya and Homework
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 }
Codeforces 714B. Filya and Homework
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。