规律CF1327-DCarousel

Posted osea

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了规律CF1327-DCarousel相关的知识,希望对你有一定的参考价值。

【题意】

  给定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
");
33             for( int i = 0 ; i < n ; i++ ){
34                 printf("1 ");
35             }
36             puts("");
37         }else if( n%2 == 0 ){
38             printf("2
");
39             for( int i = 0 ; i < n ; i++ ){
40                 printf("%d%c",i%2 ? 2 : 1 , i==n-1?
: );
41             }
42         }else{
43             if( Two ){
44                 printf("2
");
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?
: );
50                 }    
51             }
52             else{
53                 printf("3
");
54                 int t = 3 ;
55                 for( int i = 0 ; i < n-1 ; i++ ){
56                     printf("%d ",i%2 ? 2 : 1 );
57                 }
58                 printf("3
");
59             }
60         }
61     }
62     return 0 ;
63 }
View Code

 

以上是关于规律CF1327-DCarousel的主要内容,如果未能解决你的问题,请参考以下文章

CF1369D-TediousLee找规律

CF 996B World Cup 找规律/模拟

CF 1003B Binary String Constructing 构造/找规律/分类讨论

CF #727(div2)A. Contest Start,找规律,数学

CF1350D Orac and Medians(找规律)

CF468A 24 Game 找规律