• 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
    ");
        else if(s==3)
        {
            if(v[0]+v[2]==v[1]*2)
                printf("YES
    ");
            else printf("NO
    ");
        }
        else printf("NO
    ");
        return 0;
    }
  • 相关阅读:
    AAA
    Express4 启航指南
    nodejs 中的 NODE_PATH
    Windows 系统下设置Nodejs NPM全局路径
    C# VS Java
    在windows环境中使用varnish
    各种数据类型对比
    RubyGems 镜像
    npm国内镜像介绍
    WCF 身份验证 通过检查客户端IP
  • 原文地址:https://www.cnblogs.com/ckxkexing/p/8460136.html
Copyright © 2020-2023  润新知