欢迎来到endl的博客hhh☀☾☽♡♥

浏览器标题切换
把博客园图标替换成自己的图标
把博客园图标替换成自己的图标end

Sherlock and His Girlfriend(信息学奥赛一本通 1623)

【题目描述】

原题来自:Codeforces Round #400 B.

Sherlock 有了一个新女友(这太不像他了!)。情人节到了,他想送给女友一些珠宝当做礼物。

他买了 n 件珠宝。第 i 件的价值是 i+1。那就是说,珠宝的价值分别为 2,3,4,,n+1

Watson 挑战 Sherlock,让他给这些珠宝染色,使得一件珠宝的价格是另一件的质因子时,两件珠宝的颜色不同。并且,Watson 要求他最小化颜色的使用数。

请帮助 Sherlock 完成这个简单的任务。

【输入】

只有一行一个整数 n,表示珠宝件数。

【输出】

第一行一个整数 k,表示最少的染色数;

第二行 n 个整数,表示第 1 到第 n 件珠宝被染成的颜色。若有多种答案,输出任意一种。

【输入样例】

3

【输出样例】

2
1 1 2

【提示】

样例输入 2

4

样例输出 2

2
2 1 1 2

样例说明

因为 2 是 4 的一个质因子,因此第一件珠宝与第三件珠宝的颜色必须不同。

数据范围与提示:

对于全部数据,1≤n≤105 。


 

一看到这道题就想到可以把素数分一类、约数分一类了吧,然鹅我还是想得太简单惹,忘记了特判n==1、n==2的情况

AC代码:

 1 #include<bits/stdc++.h>
 2 using namespace std;
 3 const int N=1e6+1;
 4 int a[N],n,cnt,v[N];
 5 int read()
 6 {
 7     int x=0,f=1;
 8     char ch=getchar();
 9     while(ch<'0'||ch>'9')
10     {
11         if(ch=='-') f=-1;
12         ch=getchar();
13     }
14     while(ch>='0'&&ch<='9')
15     {
16         x=x*10+ch-'0';
17         ch=getchar();
18     }
19     return x*f;
20 }
21 void write(int x)
22 {
23     if(x<0)
24     {
25         putchar('-');
26         x=-x;
27     }
28     if(x>9) write(x/10);
29     putchar(x%10+'0');
30 }
31 void pre()
32 {
33     for(int i=2;i<=1000000;i++)
34     {
35         if(!v[i])a[++cnt]=i;
36         for(int j=1;j<=cnt&&a[j]*i<=1000000;j++)
37         {
38             v[i*a[j]]=1;
39             if(i%a[j]==0)break;
40         }
41     }
42 }
43 int main()
44 {
45     
46     n=read();
47     if(n+1==2)
48     {
49         putchar('1');
50         putchar('\n');
51         putchar('1');
52         putchar('\n');
53         return 0;
54     }
55     if(n+1==3)
56     {
57         putchar('1');
58         putchar('\n');
59         putchar('1');
60         putchar(' ');
61         putchar('1');
62         putchar('\n');
63         return 0;
64     }
65     pre();
66     putchar('2');putchar('\n');
67     for(int i=2;i<=n+1;i++)
68     {
69         if(!v[i])putchar('1');
70         else putchar('2');
71         putchar(' ');
72     }
73     return 0;
74 }

 

posted @ 2019-08-19 17:12  endl\n  阅读(382)  评论(0编辑  收藏  举报