专栏文章

题解 CF2050B

CF2050B题解参与者 1已保存评论 0

文章操作

快速查看文章及其快照的属性,并进行相关操作。

当前评论
0 条
当前快照
1 份
快照标识符
@miqtvfr3
此快照首次捕获于
2025/12/04 10:39
3 个月前
此快照最后确认于
2025/12/04 10:39
3 个月前
查看原文

题意:

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

思路:

考虑经典黑白格染色,将序列染成黑白间隔的颜色。所有操作都只能在某一种颜色上进行,而序列所有元素值之和一定不变。
因此,所有元素能够相等,当且仅当奇数下标的元素平均值是整数,而且奇数下标元素平均值等于偶数下标的元素平均值。
要开 long long。

程序如下:

CPP
#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

评论

0 条评论,欢迎与作者交流。

正在加载评论...