题目链接:点击查看

题目大意:给出一个旋转木马外观的排列,要求给每个木马刷上一种颜色,使得相邻的外观不同的木马颜色不同,问最少需要几种颜色,并提供构造方案

题目分析:没做出来的同学大概是没读懂题吧,一开始我也因为题意琢磨了半天,感觉像是离散化,莽了一发果然错了,后来官方给出了提示是 “ 外观相同的木马颜色也可以不同 ” 后就豁然开朗了,其实就是构造一种方案使得相邻的木马颜色都不同,分类讨论一下就好了:

  1. n 个木马的外观相同(类比于最后一个样例):使用一种颜色,每个木马染上颜色 1 即可
  2. 偶数个木马:使用两种颜色,1 2 1 2 1 2.....1 2染上颜色就好了,这样第一个木马的颜色是 1 ,最后一个木马的颜色是 2 ,即使首尾相接仍然没问题
  3. 奇数个木马:
    1. 如果存在相邻的两个木马外观相同,则可以将这两个木马视为同一个木马(合并),然后就可以按照偶数个木马讨论了
    2. 如果不满足上面的情况,那么只能用三个颜色进行染色了,如果用两种颜色染色的话,1 2 1 2 .... 1 2 1 最后会出现第一个木马和最后一个木马颜色相同的情况,所以我们只需要将最后一个木马的颜色换为 3 就可以避免了

需要注意的是,在寻找是否存在相邻木马的外观相同时,别忘了特判一下第一个木马和最后一个木马,因为在题目的意思里,给出的排列实际上是一个环状的排列

代码:

#include<iostream>
#include<cstdio>
#include<string>
#include<ctime>
#include<cmath>
#include<cstring>
#include<algorithm>
#include<stack>
#include<climits>
#include<queue>
#include<map>
#include<set>
#include<sstream>
using namespace std;typedef long long LL;typedef unsigned long long ull;const int inf=0x3f3f3f3f;const int N=2e5+100;int a[N],n,pos;bool check_one()
{for(int i=1;i<=n;i++)if(a[i]!=a[1])return false;return true;
}bool check()
{for(int i=1;i<n;i++)if(a[i]==a[i+1]){pos=i;return true;}if(a[1]==a[n]){pos=n;return true;}return false;
}int main()
{
#ifndef ONLINE_JUDGE
//  freopen("input.txt","r",stdin);
//  freopen("output.txt","w",stdout);
#endif
//  ios::sync_with_stdio(false);int w;cin>>w;while(w--){scanf("%d",&n);for(int i=1;i<=n;i++)scanf("%d",a+i);if(check_one()){puts("1");for(int i=1;i<=n;i++)printf("1 ");puts("");}else{if(n&1){if(!check()){puts("3");for(int i=1;i<=n/2;i++)printf("1 2 ");puts("3");}else{puts("2");for(int i=1;i<=pos;i++)if(i&1)printf("1 ");elseprintf("2 ");for(int i=pos+1;i<=n;i++)if(i&1)printf("2 ");elseprintf("1 ");puts("");}}else{puts("2");for(int i=1;i<=n/2;i++)printf("1 2 ");puts("");}}}return 0;
}

CodeForces - 1328D Carousel(构造+贪心)相关推荐

  1. CodeForces - 967D Resource Distribution(贪心+二分+构造)

    题目链接:点击查看 题目大意:给出 n 个机器,每个机器可以处理 a[ i ] 的工作,现在有两个工作需要处理,工作量分别为 x1 和 x2,可以将一个工作分配给 k 个机器同时完成,需要满足: k ...

  2. CodeForces - 1265D Beautiful Sequence(贪心+构造+思维)

    题目链接:点击查看 题目大意:给出a个0,b个1,c个2,d个3,要求构造一种序列,使得数列两两之间绝对值之差等于1,若不能构造输出NO 题目分析:首先我们需要稍微讨论一下特殊情况,那就是对于两端的数 ...

  3. CodeForces - 1256C Platforms Jumping(贪心+构造)

    题目链接:点击查看 题目大意:现在固定人初始时在点0处,现在我们需要跨过长度为n的一条河,到达对岸的点n+1处,给出m个木板,我们可以将这m个木板随意摆放,但相对位置不能改变,并且只能互相接触而不能互 ...

  4. Codeforces Round #301 (Div. 2) B. School Marks 构造/贪心

    B. School Marks Time Limit: 1 Sec  Memory Limit: 256 MB 题目连接 http://codeforces.com/contest/540/probl ...

  5. CodeForces - 1255D Feeding Chicken(贪心+构造+模拟)

    题目链接:点击查看 题目大意:给出一个n*m的农场,其中'.'代表空地,'R'代表大米,现在有k只鸡需要分布在这个农场之中,需要满足以下条件: 每个方格都要被鸡占领 每只鸡至少占领一个方格 每只鸡占领 ...

  6. CodeForces - 1304D Shortest and Longest LIS(构造+贪心)

    题目链接:点击查看 题目大意:题目给出 n - 1 个大小关系,分别代表一个长度为 n 的数列各个位置的相对大小,现在需要我们用两个符合相对大小关系的 1 ~ n 的一个排列,且该排列的最长不下降子序 ...

  7. 51nod 1574 || Codeforces 584 E. Anton and Ira 思维+构造+贪心

    传送门:E. Anton and Ira 题意:给定两个1-n的全排列p和s,假设交换pi和pj的代价是abs(i-j),问怎样将p交换成s才能使代价最小. 思路:先将s映射成1-n的顺序排列,再将p ...

  8. 【构造+贪心+分解质因数】CF868div2 C. Strongly Composite

    大概思路是差不多 但是没想到两个两个配对和剩下的三个三个配对的方案 Problem - C - Codeforces 题意: 思路: 构造 第一个条件:考虑将a数组的数分解质因数,然后给b数组分配质因 ...

  9. 【Codeforces】158B-Taxi(贪心,怎么贪咧)

         贪心   emmmm http://codeforces.com/contest/158/problem/B 题目大意:有四种旅客,四人一组,三人一组,两人一组,一人一组,一辆出租车最多可以 ...

最新文章

  1. python最小生成树算法_图算法|Prim算法求最小生成树
  2. mysql导出为lua配置表文件_利用lua生成一个导出数据库的bat脚本文件
  3. flush privileges 什么意思
  4. mac下androidStudio 运行模拟器出现:
  5. 【学术相关】读研究生,从学会「拒绝」导师开始
  6. poj 2778 AC自动机+矩阵快速幂
  7. 美国影视演员协会选择了Windows Azure
  8. python和pycharm怎么安装_Python3和PyCharm安装与环境配置【图文教程】
  9. 小鹏汽车上市首日股价大涨41.47% 市值150亿美元
  10. 如何保障大数据平台的安全性
  11. mysql bing logo_mysqlbing log
  12. 【HCIE 论述题】OSPF-1(区域划分)
  13. H5抽奖十二宫格声音问题
  14. 液晶屏控制器方案LT7680A
  15. Ant 下载安装配置使用教程
  16. 施工行业项目管理软件
  17. 数值分析复化求积matlab,MATLAB数值分析实验二(复合梯形、辛普森和龙贝格求积,以及二重积分计算等)...
  18. 宠物服务平台APP开发详情
  19. 君正 Halley6 开发板调试SPI LCD
  20. Altium Designer:从零开始的电路板制作攻略

热门文章

  1. swagger 修改dto注解_Swagger 详解
  2. SpringAMQP--入门案例的消息发送
  3. TCP/IP的分层管理
  4. @ComponentScan.Filter type的类型
  5. 字符串中的编码解码问题
  6. 项目前端页面框架介绍
  7. 区域数据导入功能(POI使用方式)
  8. 文件下载乱码问题分析与解决
  9. 如何防止机器模拟请求
  10. 异常-简单的异常捕获