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

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

\(分情况讨论:\)

\(\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;
}
}

D. Carousel(分类+构造)的更多相关文章

  1. XVIII Open Cup named after E.V. Pankratiev. Grand Prix of Peterhof

    A. City Wall 找规律. #include<stdio.h> #include<iostream> #include<string.h> #include ...

  2. delphi 的一些注意点和知识点

    关于Delphi中产生的文件    编辑阶段: pas/单元文件,dpk/组件包文件,dpr/工程文件,dfm/窗体文件    编译阶段: dcu/单元编译文件,dcp/Delphi Compile ...

  3. FFM算法解析及Python实现

    1. 什么是FFM? 通过引入field的概念,FFM把相同性质的特征归于同一个field,相当于把FM中已经细分的feature再次进行拆分从而进行特征组合的二分类模型. 2. 为什么需要FFM? ...

  4. JavaScript 运行原理

    i{margin-right:4px;margin-top:-0.2em}.like_comment_tips .weui-icon-success{background:transparent ur ...

  5. codeforces 111C/112E Petya and Spiders

    题目: Petya and Spiders传送门: http://codeforces.com/problemset/problem/111/C http://codeforces.com/probl ...

  6. Codeforces 460D Little Victor and Set --分类讨论+构造

    题意:从区间[L,R]中选取不多于k个数,使这些数异或和尽量小,输出最小异或和以及选取的那些数. 解法:分类讨论. 设选取k个数. 1. k=4的时候如果区间长度>=4且L是偶数,那么可以构造四 ...

  7. 文本分类学习 (十)构造机器学习Libsvm 的C# wrapper(调用c/c++动态链接库)

    前言: 对于SVM的了解,看前辈写的博客加上读论文对于SVM的皮毛知识总算有点了解,比如线性分类器,和求凸二次规划中用到的高等数学知识.然而SVM最核心的地方应该在于核函数和求关于α函数的极值的方法: ...

  8. c++——对象的构造和析构函数、构造函数的分类及调用

    1构造函数和析构函数的概念 有关构造函数 1构造函数定义及调用 1)C++中的类可以定义与类名相同的特殊成员函数,这种与类名相同的成员函数叫做构造函数: 2)构造函数在定义时可以有参数: 3)没有任何 ...

  9. C++ //构造函数的分类及调用 //分类 // 按照参数分类 无参构造函数(默认构造) 有参构造函数 //按照类型分类 普通构造 拷贝构造

    1 //构造函数的分类及调用 2 //分类 3 // 按照参数分类 无参构造函数(默认构造) 有参构造函数 4 //按照类型分类 普通构造 拷贝构造 5 6 #include <iostream ...

随机推荐

  1. buuctf misc wp 02

    buuctf misc wp 02 7.LSB 8.乌镇峰会种图 9.rar 10.qr 11.ningen 12.文件中的秘密 13.wireshark 14.镜子里面的世界 15.小明的保险箱 1 ...

  2. JNDI数据源的配置及使用 (2010-11-21 21:16:43)转载▼

    JNDI数据源的配置及使用 (2010-11-21 21:16:43)转载▼ 标签: 杂谈 分类: 数据库 数据源的作用 JDBC操作的步骤: 1. 加载驱动程序 2. 连接数据库 3. 操作数据库 ...

  3. 360众测考试,weblogic题(CVE-2018-2894)文件上传漏洞

    0x01 漏洞简介 Weblogic管理端未授权的两个页面存在任意上传jsp文件漏洞,进而获取服务器权限. Oracle 7月更新中,修复了Weblogic Web Service Test Page ...

  4. Android电池信息获取

    Android 可以通过BroadcastReceiver来获取电池信息改变的广播(ACTION_BATTERY_CHANGED),从而获取到相关的电池信息. 电池信息,及其对应的相关常数(参考网址: ...

  5. 11-JS变量

    一. JavaScript 是什么 JavaScript是一种运行在客户端(浏览器)的脚本语言 客户端:客户端是相对于服务器而言的,在这里先简单理解为浏览器 浏览器就是一个客户端软件,浏览器从服务器上 ...

  6. Hash记录字符串

    Hash记录字符串模板: mod常常取1e9+7,base常常取299,,127等等等....有的题目会卡Hash,因为可能会有两个不同的Hash但却有相通的Hash值...这个时候可以用双Hash来 ...

  7. Python - Python算法之冒泡算法的超简单实现

    [原创]转载请注明作者Johnthegreat和本文链接 冒泡排序在算法中算是最简单也最容易实现的,这里介绍一个非常简单实现的代码: def bubble_sort(ls): for first in ...

  8. 在dwr的调用类里获取请求信息

    在dwr的调用类里获取请求的相关信息HttpSession session = WebContextFactory.get().getSession();HttpServletResponse res ...

  9. 【AspNetCore源码】设计模式 - 提供者模式

    AspNetCore源代码发现日志模块的设计模式(提供者模式),特此记录 学习设计模式的好处是,我们可以容易扩展它达到我们要求,除了要知道如何扩展它,还应该在其他地方应用它 类图 & 分析 角 ...

  10. css3变形

    CSS3变形--旋转 rotate() 旋转rotate()函数通过指定的角度参数使元素相对原点进行旋转.它主要在二维空间内进行操作,设置一个角度值,用来指定旋转的幅度.如果这个值为正值,元素相对原点 ...