zoukankan      html  css  js  c++  java
  • 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('
    ');
    51         putchar('1');
    52         putchar('
    ');
    53         return 0;
    54     }
    55     if(n+1==3)
    56     {
    57         putchar('1');
    58         putchar('
    ');
    59         putchar('1');
    60         putchar(' ');
    61         putchar('1');
    62         putchar('
    ');
    63         return 0;
    64     }
    65     pre();
    66     putchar('2');putchar('
    ');
    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 }
  • 相关阅读:
    subtitleedit
    NHibernate.Mapping1.1.csgen 模板
    js jqueryhotkeys
    c#.net将对象序列化,反序列化json
    ruby document
    sqlserver2008新数据类型
    [转]杂记
    UVA 532 Dungeon Master
    UVA 10557 XYZZY
    UVA 10129 Play on Words
  • 原文地址:https://www.cnblogs.com/ljy-endl/p/11378285.html
Copyright © 2011-2022 走看看