Codeforces Round #629 (Div. 3) D—Carousel

整理的算法模板:ACM算法模板总结(分类详细版)

题目链接:https://codeforces.ml/contest/1328/problem/D

A B C题就不贴了;

两万多人的cf把我心态搞崩了,本来家里网速就差....打开题目,打开提交界面都要好久好久,心态崩了;qaq......

题面就不上传了;见图片;

D题光看题意以及样例的话很容易被误导;相同的动物可以染上不同的颜色;但是相邻的不同的动物不能染成相同的颜色;(后来不卡了之后才看到公告提示.....)

属于黑白染色问题,先用1 2 1 2 1 2 1 2染色,注意中间相同的动物颜色不做转换;并且记录最后一次两个动物相同出现在哪个位置res;判断最后一个和开头一个动物颜色是否冲突;

如果冲突,判断res是否存在,存在的话,从res开始,把每个动物的颜色取反即可;

如果不存在,就不能解决这个冲突了,所以只能上第三种颜色了;

#include <bits/stdc++.h>
using namespace std;
const int N=2*100005;
int a[N],s[N];
int main()
{
	int t;
	cin >>t;
	while(t--)
	{
		int n;
		cin >>n;
		int cnt=1,res=-1,k=1;
		cin >>a[1];
		s[1]=cnt;
		for(int i=2;i<=n;i++)
		{
			cin >>a[i];
			if(a[i]==a[i-1]) s[i]=s[i-1],res=i;
			else s[i]=3-cnt,cnt=3-cnt,k=2;
		}
		if(a[1]!=a[n]&&s[1]==s[n])
		{
			if(res>0)
				for(int i=res;i<=n;i++)	s[i]=3-s[i];
			else s[n]=3,k=3;
		}
		cout <<k<<endl;
		for(int i=1;i<=n;i++) cout <<s[i]<<" ";
		cout <<'\n'; 
	}
}
扫描二维码关注公众号,回复: 10243485 查看本文章
发布了224 篇原创文章 · 获赞 56 · 访问量 6万+

猜你喜欢

转载自blog.csdn.net/weixin_43872728/article/details/105137034