CF926C题解

修改日志

2023/1/4 18:192023/1/4\text{ }18:19:对解法进一步的说明。

思路

太水了,不应该是绿。

O(n)O(n) 遍历一遍 aa 数组,处理出每条条纹的长度,如果当前条纹是第一条,则将长度保存至变量 pp,否则,与 pp 进行比较,如果不相等,则输出 NO,否则不操作。

注意最后一条要特判。

代码

#include<bits/stdc++.h>
using namespace std;
int n,k,b,p=-1;
int main(){
	scanf("%d",&n);
	b=2;
	for(int i=1;i<=n;i++){
		int a;
		scanf("%d",&a);
		if(a==b||b==2) k++;
		else{
			if(p==-1) p=k;
			else if(p!=k) return !printf("NO");
			k=1;
		}
		b=a;
	}
	if(p!=-1&&p!=k) return !printf("NO");//最后一条特判
	return !printf("YES");
}
posted @ 2022-12-24 19:39  fengxiaoyi  阅读(16)  评论(0)    收藏  举报  来源