码迷,mamicode.com
首页 > 其他好文 > 详细

【规律】【CF1327-D】Carousel

时间:2020-03-31 10:32:09      阅读:70      评论:0      收藏:0      [点我收藏+]

标签:amp   class   相同   int   不同   偶数   lse   pos   alt   

【题意】

  给定n个数的围成一个环,如果相邻的位置,不同的数字必须涂不同的颜色。问最少使用多少种颜色

【题解】

  根据三色定理,答案肯定是小于等于3。

  1、如果只出现一种颜色,那么答案肯定是全1。

  2、如果是偶数,肯定是1,2,1,2。

  3、如果是奇数,同时存在一个位置连续相同,那么答案就是1,2,1,2……1)(1,2,1,2……

    因为通过连续为同一个数,可以人为分割两组,且肯定满足。

    其余情况就是1,2,1,2,……3


 

【具体代码】

 

技术图片
 1 #include<cstdio>
 2 #include<cstdlib>
 3 #include<cstring>
 4 #include<algorithm>
 5 #include<iostream>
 6 using namespace std;
 7 typedef long long ll ;
 8 const ll mod = 998244353 ;
 9 const int N = 2e6 + 10;
10 int a[N],n;
11 int main()
12 {
13     int T ;
14     scanf("%d",&T);
15     while( T -- ){
16         scanf("%d",&n);
17  
18         bool One = true ;
19         bool Two = false ;
20         int Pos = -1 ; 
21         for( int i = 0 ; i < n ; i++ ){
22             scanf("%d",&a[i]);
23             if( i>0 && a[i-1] != a[i] ) One = false ;
24         }
25         for( int i = 0 ; i < n ; i++ ){
26             if( a[(i-1+n)%n] == a[i] ){
27                 Pos = i ;
28                 Two = true ;
29             }
30         }
31         if( One ){
32             printf("1\n");
33             for( int i = 0 ; i < n ; i++ ){
34                 printf("1 ");
35             }
36             puts("");
37         }else if( n%2 == 0 ){
38             printf("2\n");
39             for( int i = 0 ; i < n ; i++ ){
40                 printf("%d%c",i%2 ? 2 : 1 , i==n-1?\n: );
41             }
42         }else{
43             if( Two ){
44                 printf("2\n");
45                 int t = 2 ;
46                 for( int i = 0 ; i < n ; i++ ){
47                     if( i == Pos ) t = t ^ 3 ;
48                     t = t ^ 3 ;
49                     printf("%d%c",t,i==n-1?\n: );
50                 }    
51             }
52             else{
53                 printf("3\n");
54                 int t = 3 ;
55                 for( int i = 0 ; i < n-1 ; i++ ){
56                     printf("%d ",i%2 ? 2 : 1 );
57                 }
58                 printf("3\n");
59             }
60         }
61     }
62     return 0 ;
63 }
View Code

 

【规律】【CF1327-D】Carousel

标签:amp   class   相同   int   不同   偶数   lse   pos   alt   

原文地址:https://www.cnblogs.com/Osea/p/12603390.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!