题解 CF2050B

· · 题解

题意:

给定一个序列,每次可以对相隔一个元素的两个值一个 +1,一个 -1,问随意操作后是否可以使得序列所有值相等。

思路:

考虑经典黑白格染色,将序列染成黑白间隔的颜色。所有操作都只能在某一种颜色上进行,而序列所有元素值之和一定不变。

因此,所有元素能够相等,当且仅当奇数下标的元素平均值是整数,而且奇数下标元素平均值等于偶数下标的元素平均值。

要开 long long。

程序如下:

#include<cstdio>
#include<cmath>
#include<cstring>
#include<algorithm>
using namespace std;
int T,n;
int main(){
    scanf("%d",&T);
    while(T--){
        scanf("%d",&n);
        long long tot1=0,tot2=0;
        for(int i=1;i<=n;i++){
            int a;
            scanf("%d",&a);
            if(i%2==1)tot1+=a;
            else tot2+=a;
        }
        if(tot1%((n+1)/2)!=0||tot2%(n/2)!=0||(tot1/((n+1)/2))!=tot2/(n/2))printf("NO\n");
        else printf("YES\n");
    }
    return 0;
}

THE END