CodeForces-714B-Filya and Homework+思路
Filya and Homework
题意:
给定一串数字,任选一个数a,把若干个数加上a,把若干个数减去a,能否使得数列全部相同;
思路:
我开始就想找出平均数,以为只有和偶数的可以,结果wa在 1, 3这样的数据上;
后来才知道是要考虑等差数列的判定(还只用考虑3个的情况),下面还学到了大佬的骚操作;
正确解法:如果这个数组里面不相等的数大于 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 <iostream> #include <vector> #include <cstdio> #include <algorithm> using namespace std; int n; vector<int>v; int main(){ scanf("%d",&n); for(int i=0;i<n;i++) { int x; scanf("%d",&x); v.push_back(x); } sort(v.begin(),v.end()); v.erase(unique(v.begin(),v.end()),v.end()); int s = v.size(); if(s<3)printf("YES\n"); else if(s==3) { if(v[0]+v[2]==v[1]*2) printf("YES\n"); else printf("NO\n"); } else printf("NO\n"); return 0; }
skr