DTOJ#5220. 染色

传送门

给定 n n n,你现在需要给整数 1 1 1 n n n 进行染色,使得对于所有的 1 ≤ i < j ≤ n 1\leq i<j\leq n 1i<jn,若 j − i j - i ji 为质数,则 i i i j j j 不同色。

求出颜色尽可能少的染色方案。如果有多种方案,输出任意一种即可。

第一行一个整数 n n n

第一行一个整数 k k k,表示颜色数。

第二行 n n n 个整数 c o l i col_i coli 1 ≤ c o l i ≤ k 1 \leq col_i \leq k 1colik),表示 i i i 的颜色。

样例输入

7

样例输出

4
1 2 2 3 3 4 1

对于 30 % 30\% 30% 的数据, n ≤ 10 n \leq 10 n10

对于 60 % 60\% 60% 的数据, n ≤ 20 n \leq 20 n20

对于 100 % 100\% 100% 的数据, n ≤ 1 0 4 n \leq 10^4 n104

ahsdfz noip2020模拟

容易发现, n n n 很大的时候答案最多为 4,即 1 , 2 , 3 , 4 , 1 , 2 , 3 , 4 , 1 , 2 , 3 , 4... 1,2,3,4,1,2,3,4,1,2,3,4... 1,2,3,4,1,2,3,4,1,2,3,4...因为质数中只有 2 是偶数,所以同颜色必然差为偶数,不是质数。

#include<bits/stdc++.h>
#define N 10005
using namespace std;
int read(){
    
    
	int op=1,sum=0;char ch=getchar();
	while(ch<'0'||ch>'9') {
    
    if(ch=='-') op=-1;ch=getchar();}
	while(ch>='0'&&ch<='9') sum=(sum<<3)+(sum<<1)+ch-'0',ch=getchar();
	return op*sum;
}
int is[N];
inline void init(int n){
    
    
	is[1]=1;
	for(int i=2;i<=n;++i){
    
    
		if(!is[i]){
    
    
			for(int j=i+i;j<=n;j+=i)is[j]=1;
		}
	}
}
int b[20],v[N],tot,head[N],nex[N*1500],ver[N*1500];
inline void add(int x,int y){
    
    
	nex[++tot]=head[x];head[x]=tot;ver[tot]=y;
}
int ans[N],maxn;
void dfs(int x){
    
    
	v[x]=1;
	for(int i=head[x];i;i=nex[i]){
    
    
		int y=ver[i];
		b[ans[y]]=x;
	}
	for(int i=1;i<=20;++i)if(b[i]!=x){
    
    
		ans[x]=i;maxn=max(maxn,ans[x]);
		break;
	}
	for(int i=head[x];i;i=nex[i]){
    
    
		int y=ver[i];
		if(v[y])continue;
		dfs(y);
	}
}
int main(){
    
    
//	freopen("color.in","r",stdin);
//	freopen("color.out","w",stdout);
	int n=read();
if(n<=8){
    
    	init(n+1);
	for(int i=1;i<=n;++i){
    
    
		for(int j=i+1;j<=n;++j){
    
    
			if(!is[j-i]){
    
    
				add(i,j);
				add(j,i);
			}
		}
	}
	for(int i=1;i<=n;++i){
    
    
		if(!v[i])dfs(i);
	}
	printf("%d\n",maxn);
	for(int i=1;i<=n;++i)printf("%d ",ans[i]);
	puts("");
	return 0;
}
cout<<4<<endl;
for(int i=1;i<=n;++i){
    
    
	printf("%d ",(i-1)%4+1);
}
puts("");
return 0;

}

猜你喜欢

转载自blog.csdn.net/CSDNzhanghongyu/article/details/110499044
今日推荐