\(题目的要求似乎很低:只需要不同类的相邻元素不同色就行了。\)

下面的讨论的话,实际上最后一个点是关键,要想到怎么让最后一个点不开新的颜色就简单了。

\(分情况讨论:\)

\(\color{Red}{Ⅰ.只有一个种类或n=1,那么全涂一种颜色就行了。}\)

\(\color{Purple}Ⅱ、偶数个元素,全涂1和2相间染色,到一定满足要求且最优\)

\(\color{Orange}{Ⅲ.奇数个元素}\)

\(这个时候因为末尾元素可能会和n-1或1号元素颜色相同,所以我们再继续分类\)

\(Ⅲ.1.\ n和n-1的种类相同,和1随意\)

那么前面还是1和2相间染色,最后一个元素和n-1同色,这样保证了和1不同色。

\(Ⅲ.2.\ n和1种类相同,那么直接1和2相间染色\)

\(Ⅲ.3.\ 值得注意的是和两边种类不同时,为了使答案是2,我们要尽可能让1和n-1号元素的颜色相同\)

如果前面有重复元素连在一起,那么我改变一个重复元素不相间染色,后面相间染色,那就和偶数的情况一样

例子:种类:1 1 2 3 4

相间染色:1 2 1 2 1(此时不满足条件)

改变重复元素:1 1 2 1 2(满足条件)

如果没有上面这种情况,只能新开颜色3,给末尾元素涂上3.

#include <bits/stdc++.h>
using namespace std;
const int maxn=2*1e5+9;
int t[maxn],q,n,a[maxn],k;
void print(int k,int w){
cout<<k<<endl;
for(int i=1;i<=w;i++) cout<<a[i]<<" ";
}
int main()
{
cin>>q;
while(q--)
{
k=1;
cin>>n;
int flag=0;
for(int i=1;i<=n;i++)
{
cin>>t[i];
if(t[i]!=t[i-1]&&i!=1) flag=1;
}
if(flag==0||n==1)//只有一种颜色
{
cout<<1<<endl;
for(int i=1;i<=n;i++) cout<<1<<" ";
}
else
{
for(int i=1;i<=n;i++)
if(i%2==1) a[i]=1;
else a[i]=2;
if(n%2==0) print(2,n);
else
{
if(t[n]!=t[n-1]&&t[n]!=t[1])
{
int P=0;
for(int i=2;i<=n-1;i++)
if(t[i]==t[i-1]) P++;
if(P>=1)
{
a[1]=1;int num;
for(int i=2;i<=n-1;i++)
{
if(t[i]==t[i-1])
{
a[i]=a[i-1],num=i+1;
break;
}
}
for(int i=num;i<=n;i++)
if(a[i-1]==1) a[i]=2;
else a[i]=1;
print(2,n);
}
else
{
a[n]=3;
print(3,n);
}
}
else if(t[n]!=t[n-1]) print(2,n);//和n-1个不相等
else if(t[n]!=t[1])//和第一个不相等
{
a[n]=2;
print(2,n);
}
else print(2,n);//都不想等,怎么都可以
}
}
cout<<endl;
}
}

最新文章

  1. [Visual Studio]项目属性中继承的值怎么删除
  2. socket.io稳定性及事件测试
  3. 实现java 中 list集合中有几十万条数据,每100条为一组取出
  4. 【POJ】3255 Roadblocks(次短路+spfa)
  5. FastDFS安装、配置、部署
  6. java 计算 文件 md5
  7. svn2git使用小记
  8. Ext.MessageBox的用法
  9. Bzoj 1598: [Usaco2008 Mar]牛跑步 dijkstra,堆,K短路,A*
  10. EF学习系列
  11. 十分钟彻底理解javascript 的 this指向,不懂请砸店
  12. 二叉查找树之 Java的实现
  13. vw、vh、vmin、vmax、em、rem的使用详解
  14. 本地上传项目到github
  15. PYTHON-基本数据类型-元祖类型,字典类型,集合类型
  16. Selenium基础知识(二)鼠标操作
  17. PHP 函数 ignore_user_abort()详解笔记
  18. mysql ON DUPLICATE KEY UPDATE重复插入时更新
  19. python面试题库——1Python基础篇
  20. xshell 常用快捷键

热门文章

  1. Java编程最差实践常见问题详细说明(1)转
  2. break与continue用法注意事项
  3. 面试题 ~ 什么是RESTful?
  4. 用three.js开发三维地图实例
  5. Extjs入门——环境配置
  6. L15卷积神经网络基础
  7. 初始化 RESTful API 风格的博客系统
  8. 前端面试的那些事儿(1)~JavaScript 原始数据类型
  9. System.Timers.Timer
  10. Visual Studio 添加图标和版本