Codeforces Round #371 (Div. 2) - B

 

题目链接:http://codeforces.com/contest/714/problem/B

题意:给定一个长度为N的初始序列,然后问是否能找到一个值x,然后使得序列的每个元素+x/-x/不变,最后把序列变成各个元素都相等(序列每个元素只能进行操作一次)

思路:因为每个元素只能操作一次,而且操作的值只有一个值x。那么就可以发现当序列中存在3个以上的互不相等的数时一定不能构造要求的序列。 当序列存在3个一下的互补相同的数时,一定能构造要求的序列。现在要考虑的是刚刚有3个互不相同的序列时,把序列去重+排序后,如果数2-数1=数3-数2.则可以构造,否则不能构造。

#define _CRT_SECURE_NO_DEPRECATE
#include<iostream>
#include<cstdio>
#include<cstring>
#include<algorithm>
#include<string>
#include<queue>
#include<vector>
#include<time.h>
#include<cmath>
#include<set>
using namespace std;
typedef long long int LL;
const int MAX = 2000 + 5;
int main(){
//#ifdef kirito
//    freopen("in.txt", "r", stdin);
//    freopen("out.txt", "w", stdout);
//#endif
    int n,num;
    while (~scanf("%d", &n)){
        set<int>se;
        for (int i = 0; i < n; i++){
            scanf("%d", &num); se.insert(num);
        }
        if (se.size()>3){
            printf("NO\n");
        }
        else if (se.size() == 3){
            vector<int>m;
            for (set<int>::iterator it = se.begin(); it != se.end(); it++){
                m.push_back(*it);
            }
            sort(m.begin(), m.end());
            if (m[1] - m[0] == m[2] - m[1]){
                printf("YES\n");
            }
            else{
                printf("NO\n");
            }
        }
        else{
            printf("YES\n");
        }
    }
    return 0;
}

 

posted @ 2016-09-14 16:50  キリト  阅读(139)  评论(0编辑  收藏  举报