• AcWing 1293. 夏洛克和他的女朋友


    一.题目链接

    二.思路

    数据范围: 1 ≤ n ≤ 1 0 5 1 \le n \le 10^5 1n105
    根据题意,把具有题目这种关系看做是一条边,可以发现,这条边必然是一个质数连向一个合数,保证这条边的两端颜色不同即可,因此,所有珠宝之间的关系可以看成很多条边的图。因为题目的限制只存在与一个合数和它的质因子,所以质数之间和合数之间是没有限制条件的,可以看成一个二分图所以最多只需要两种颜色即可。
    第一步:预处理 1 0 5 10^5 105之内的所有质数。
    第二步:
    1.如果珠宝数量小于3,则珠宝的价格全部为质数,所以只需要1种颜色即可。
    2.依次枚举每一个珠宝的价值,如果当前这个珠宝的价格是质数则染成1号色,否则为2号色。

    三.代码

    #include 
    #include 
    #include 
    
    using namespace std;
    
    const int N = 100010;
    
    int primes[N], cnt;
    bool st[N];
    
    int n;
    //线性筛
    void init(int n)
    {
        for(int i = 2; i <= n; i ++)
        {
            if(!st[i]) primes[cnt ++] = i;
            for(int j = 0; primes[j] <= n / i; j ++)
            {
                st[primes[j] * i] = true;
                if(i % primes[j] == 0) break;
            }
        }
    }
    int main()
    {
        init(N);
        cin >> n;
        //第一种情况 如果珠宝的数量小于3只需要用一种颜色
        if(n < 3)
        {
            cout << 1 << endl;
            for(int i = 0; i < n; i ++) cout << 1 << " ";
            return 0;
        }
        //第二种情况 珠宝的数量大于3需要用两种颜色
        cout << 2 << endl;
        //枚举每一个珠宝的价格
        for(int i = 2; i <= n + 1; i ++)
        {   //如果当前珠宝的价格是质数就输出1
            if(!st[i]) cout << 1 << " ";
            else cout << 2 << " ";
        }
        return 0;
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33
    • 34
    • 35
    • 36
    • 37
    • 38
    • 39
    • 40
    • 41
    • 42
    • 43
    • 44
    • 45
    • 46
  • 相关阅读:
    Abnova ACTN4纯化兔多克隆抗体说明书
    C语言:指针的关系运算
    Vue+ElementUI实战
    Nie et al. 2010 提出的不等式定理
    Docker安装canal、mysql进行简单测试与实现redis和mysql缓存一致性
    【测开求职】2023秋招百度三面面经
    phpstorm安装xdebug(phpstudy环境下)成功运行
    静态ip和动态ip区别在哪?
    【LeetCode】【剑指offer】【栈的压入、弹出序列】
    二叉树(binary tree)
  • 原文地址:https://blog.csdn.net/qq_53244181/article/details/126073236