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

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

\(分情况讨论:\)

\(\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.

  1. #include <bits/stdc++.h>
  2. using namespace std;
  3. const int maxn=2*1e5+9;
  4. int t[maxn],q,n,a[maxn],k;
  5. void print(int k,int w){
  6. cout<<k<<endl;
  7. for(int i=1;i<=w;i++) cout<<a[i]<<" ";
  8. }
  9. int main()
  10. {
  11. cin>>q;
  12. while(q--)
  13. {
  14. k=1;
  15. cin>>n;
  16. int flag=0;
  17. for(int i=1;i<=n;i++)
  18. {
  19. cin>>t[i];
  20. if(t[i]!=t[i-1]&&i!=1) flag=1;
  21. }
  22. if(flag==0||n==1)//只有一种颜色
  23. {
  24. cout<<1<<endl;
  25. for(int i=1;i<=n;i++) cout<<1<<" ";
  26. }
  27. else
  28. {
  29. for(int i=1;i<=n;i++)
  30. if(i%2==1) a[i]=1;
  31. else a[i]=2;
  32. if(n%2==0) print(2,n);
  33. else
  34. {
  35. if(t[n]!=t[n-1]&&t[n]!=t[1])
  36. {
  37. int P=0;
  38. for(int i=2;i<=n-1;i++)
  39. if(t[i]==t[i-1]) P++;
  40. if(P>=1)
  41. {
  42. a[1]=1;int num;
  43. for(int i=2;i<=n-1;i++)
  44. {
  45. if(t[i]==t[i-1])
  46. {
  47. a[i]=a[i-1],num=i+1;
  48. break;
  49. }
  50. }
  51. for(int i=num;i<=n;i++)
  52. if(a[i-1]==1) a[i]=2;
  53. else a[i]=1;
  54. print(2,n);
  55. }
  56. else
  57. {
  58. a[n]=3;
  59. print(3,n);
  60. }
  61. }
  62. else if(t[n]!=t[n-1]) print(2,n);//和n-1个不相等
  63. else if(t[n]!=t[1])//和第一个不相等
  64. {
  65. a[n]=2;
  66. print(2,n);
  67. }
  68. else print(2,n);//都不想等,怎么都可以
  69. }
  70. }
  71. cout<<endl;
  72. }
  73. }

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. MYSQ创建联合索引,字段的先后顺序,对查询的影响分析

    MYSQ创建联合索引,字段的先后顺序,对查询的影响分析 前言 最左匹配原则 为什么会有最左前缀呢? 联合索引的存储结构 联合索引字段的先后顺序 b+树可以存储的数据条数 总结 参考 MYSQ创建联合索 ...

  2. 如何从零开始学Python?会玩游戏就行,在玩的过程就能掌握编程

    现在学习编程的人很多,尤其是python编程,都列入高考了,而且因为人工智能时代的到来,编程也将是一门越来越重要的技能. 但是怎么从零开始学python比较好呢?其实,你会玩游戏就行. 从零基础开始教 ...

  3. 【draft】Team project :Bing dictionary plug-in

    课后~ 开会调研开会调研开会~ 在和Bing词典负责人进行了可行性的深入磋商后,我们对本次选题有了更加清晰的认识~困难好多~然而终于敲定了项目内容,我们的目标是这样一款神奇的插件,它帮你记录下新近查询 ...

  4. Dae-Da-Lus小组idea集锦

    Dae-Da-Lus小组成员经过认真的思考,每一位同学都提出了自己对于Team Project的想法,暂时Mark在这里,以备查阅~ 曹士杰: 作为一个计算机专业的学生,我想我们应该是幸运的.计算机科 ...

  5. 详解 Lambda表达式

    Lambda表达式 概述: Lambda 是一个匿名函数, 我们可以把 Lambda表达式理解为是一段可以传递的代码 (将代码像数据一样进行传递) 可以写出更简洁.更灵活的代码. 作为一种更紧凑的代码 ...

  6. self不明白什么意思,我来帮助你了解self的含义

    先看下面这段代码 # 用函数模仿类def dog(name, gender): def jiao(dog1): print('%s汪汪叫' % dog1["name"]) def ...

  7. 实战 | 将Apache Hudi数据集写入阿里云OSS

    1. 引入 云上对象存储的廉价让不少公司将其作为主要的存储方案,而Hudi作为数据湖解决方案,支持对象存储也是必不可少.之前AWS EMR已经内置集成Hudi,也意味着可以在S3上无缝使用Hudi.当 ...

  8. Spring Security 是如何在 Servlet 应用中执行的?

    Spring Security 是一个强大的认证和授权框架,它的使用方式也非常简单,但是要想真正理解它就需要花一时间来学习了,最近在学习 Spring Security 时有一些新的理解,特意记录下来 ...

  9. Netty源码分析之ChannelPipeline—异常事件的传播

    ChannelHandler中异常的获取与处理是通过继承重写exceptionCaught方法来实现的,本篇文章我们对ChannelPipeline中exceptionCaught异常事件的传播进行梳 ...

  10. 关于搭建IIS网页弹出登录框的解决方案

    今天自己搭建IIS服务器的时候,明明设置了匿名访问,但是用ie访问127.0.0.1的时候还是会弹出一个登陆框,最后在网上找到答案. 转自: https://blog.csdn.net/sunleib ...