整理的算法模板: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 查看本文章