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;
}

 

posted @ 2018-02-22 21:17  ckxkexing  阅读(100)  评论(0编辑  收藏  举报