ZROI T20200720
T1 染色(color)
签到题
题目描述
给定 n,你现在需要给整数 1 到 n 进行染色,使得对于所有的 1≤i<j≤n,若 j−ij−i 为质数,则 ii 和 jj 不同色。
求出颜色尽可能少的染色方案。如果有多种方案,输出任意一种即可。
输入格式
第一行一个整数 n。
输出格式
第一行一个整数 k,表示颜色数。
第二行 n 个整数 coli(1≤coli≤k),表示 i 的颜色。
数据范围
对于30%的数据,n≤10;
对于 60% 的数据,n≤20;
对于 100% 的数据,n≤104。
时空限制
时间限制:1s
空间限制:128MB
样例输入
7
样例输出
4
1 2 2 3 3 4 1
考虑质数可以分为2和奇质数。
我们考虑奇偶性染色,便可以满足所有的奇质数。
因为有2的存在,我们必须按照mod 4的方式 染色。
当n小于8的时候爆搜。(我是用特判)
1 #include<bits/stdc++.h> 2 using namespace std; 3 inline int read() 4 { 5 int x=0;char c=getchar(); 6 for(;!isdigit(c);c=getchar()); 7 for(;isdigit(c);c=getchar()) x=x*10+c-'0'; 8 return x; 9 } 10 int n; 11 int main() 12 { 13 n=read(); 14 if(n==1) printf("1\n1\n"); 15 else if(n==2) printf("1\n1 1\n"); 16 else if(n==3) printf("1\n1 1 2\n"); 17 else if(n==4) printf("2\n1 1 2 2\n"); 18 else if(n==5) printf("3\n1 1 2 2 3\n"); 19 else if(n==6) printf("3\n1 1 2 2 3 3\n"); 20 else{ 21 printf("4\n"); 22 for(int i=1;i<=n;i++) 23 { 24 printf("%d ",((i-1)%4)+1); 25 } 26 } 27 return 0; 28 }

浙公网安备 33010602011771号