1. 问题描述:

夏洛克有了一个新女友(这太不像他了!)。情人节到了,他想送给女友一些珠宝当做礼物。他买了 n 件珠宝,第 i 件的价值是 i + 1,也就是说,珠宝的价值分别为 2,3,…,n + 1。华生挑战夏洛克,让他给这些珠宝染色,使得一件珠宝的价格是另一件珠宝的价格的质因子时,两件珠宝的颜色不同。并且,华生要求他使用的颜色数尽可能少。请帮助夏洛克完成这个简单的任务。

输入格式

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

输出格式

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

数据范围

1 ≤ n ≤ 10 ^ 5

输入样例1:

3

输出样例1:

2
1 1 2

输入样例2:

4

输出样例2:

2
2 1 1 2
来源:https://www.acwing.com/problem/content/description/1295/

2. 思路分析:

分析题目可以知道一开始比较容易想到的应该是图论方面的问题,一个数是另外一个数的质因子可以看成某个质数向另外一个合数连一条边,但是直接这样做可以发现很难解决,所以我们需要挖掘一下题目的特殊性,可以发现都是质数向合数连一条边,所以整个图是一个二分图(得到这一点其实很重要),我们可以将2~n+1的数字分成两类,左边为质数,右边为合数,质数与合数分别染成不同的颜色即可,所以答案小于等于2,由于题目中至少一个数字所以答案不可能为0,所以答案只能为1或者2,什么时候为1呢?可以发现当没有合数的时候答案就为1,此时二分图中是没有任何边的,n = 1,x = 2;n = 2,x = 2,3,n = 3,x = 2,3,4,n = 3的时候就有合数了,所以当n <= 2时答案为1,当n >= 3时答案为2,然后使用线性筛法法标记所有的质数,将质数和合数分别染成不同的颜色即可,代码不是特别难,主要是中间的分析过程比较有难度。

3. 代码如下:

from typing import Listclass Solution:# 线性筛def init(self, n: int, primes: List[int], st: List[int]):count = 0for i in range(2, n):if st[i] == 0:primes[count] = icount += 1j = 0while primes[j] * i < n:st[primes[j] * i] = 1if i % primes[j] == 0:breakj += 1def process(self):n = int(input())primes, st = [0] * (n + 10), [0] * (n + 10)self.init(n + 10, primes, st)if n <= 2: print(1)else: print(2)# 是质数输出1否则输出2for i in range(2, n + 2):if st[i] == 0:print(1, end=" ")else:print(2, end=" ")print()if __name__ == '__main__':Solution().process()

1293 夏洛克和他的girl friend(二分图、线性筛)相关推荐

  1. AcWing 1293. 夏洛克和他的女友(二分图染色 思维 线性筛)

    夏洛克有了一个新女友(这太不像他了!). 情人节到了,他想送给女友一些珠宝当做礼物. 他买了 n 件珠宝,第 i 件的价值是 i+1,也就是说,珠宝的价值分别为 2,3,-,n+1. 华生挑战夏洛克, ...

  2. 1293. 夏洛克和他的女朋友【二分图】

    https://www.acwing.com/problem/content/1295/ 其实你会发现,质数和其合数必有一条边. 而质数之间无联系,合数之间也无联系.这就是一个二分图问题. 那么如果有 ...

  3. AcWing 1293. 夏洛克和他的女朋友(思维 欧拉筛 图论)

    夏洛克有了一个新女友(这太不像他了!). 情人节到了,他想送给女友一些珠宝当做礼物. 他买了 nn 件珠宝,第 ii 件的价值是 i+1i+1,也就是说,珠宝的价值分别为 2,3,-,n+12,3,- ...

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

    一.题目链接 二.思路 数据范围:1≤n≤1051 \le n \le 10^51≤n≤105 根据题意,把具有题目这种关系看做是一条边,可以发现,这条边必然是一个质数连向一个合数,保证这条边的两端颜 ...

  5. AcWing 1293. 夏洛克和他的女朋友 二分图

    题 是一个二分图染色. 质数不是质数的质因子,因为质数不会有因子,所以质数全是颜色1 合数不是合数的质因子,因为合数不"质",所以合数全都是颜色2 n小于3的时候只有1种颜色,其他 ...

  6. 1293. 夏洛克和他的npy(二分图,筛质数)

    原题链接 - AcWing 分析:限制条件/要求,如下 要选择尽可能少的颜色 一件珠宝的价格是另一件珠宝的质因子,两件珠宝颜色不同 1.通过第二个性质我们可以分析出,由于质数必然没有质因子,那么他的颜 ...

  7. 夏洛克和他的女朋友(隐藏质数筛)

    原题链接 夏洛克有了一个新女友(这太不像他了!). 情人节到了,他想送给女友一些珠宝当做礼物. 他买了 n 件珠宝,第 i 件的价值是 i+1,也就是说,珠宝的价值分别为 2,3,-,n+1. 华生挑 ...

  8. 夏洛克和他的女朋友—线性筛—逻辑

    输入样例1: 3 输出样例1: 2 1 1 2 输入样例2: 4 输出样例2: 2 2 1 1 2 1.一件珠宝的价格是另一件珠宝的价格的质因子时,两件珠宝的颜色不同,则等价于每一个合数与它的每一个质 ...

  9. AcWing1293. 夏洛克和他的女朋友

    1293. 夏洛克和他的女朋友 题目 提交记录 讨论 题解 视频讲解 夏洛克有了一个新女友(这太不像他了!). 情人节到了,他想送给女友一些珠宝当做礼物. 他买了 nn 件珠宝,第 ii 件的价值是  ...

最新文章

  1. 回击质疑 HP StoreOnce用高性能说话
  2. 从服务器上的数据库备份到本地
  3. TCP连接——三次握手和四次断开
  4. 基于智慧教室|无纸化会议的新选择:RTMP解决方案
  5. 机器学习与差分隐私(认证鲁棒性和隐私保护)
  6. 动态库注入--APC注入
  7. AY写给国人的教程- VS2017 Live Unit Testing[1/2]-C#人爱学不学-aaronyang技术分享
  8. web漏洞扫描工具_如何使用Arachni扫描web漏洞
  9. 耶鲁大学公开课:哲学-死亡
  10. 201521123106《java程序设计》第三周学习总结
  11. 12. Copy all parts of an object
  12. android 百度 tts,百度语音TTS. android 启动时闪退
  13. selenium 清空缓存
  14. EMLOG模板 自适应Fontopen3 可做企业站
  15. SCS【2】单细胞转录组 之 cellranger
  16. word无法验证服务器,Office提示“无法验证此应用程序的许可证”时怎么处理?...
  17. 视频类APP体验报告
  18. c语言修仙键盘,最后一口气ulbsans电脑版
  19. 【转载】设备唯一标识方法(Unique Identifier):如何在Windows系统上获取设备的唯一标识
  20. Ubuntu音乐播放器

热门文章

  1. 创建新环境后,如何在Jupyter Notebook中使用新环境?
  2. ArcGIS10.6汉化教程以及安装包介绍
  3. 第十二周 任务二
  4. 张五常:功课不行 照样成才
  5. python中的lambda函数
  6. mk突变点检测_MK检验突变分析 matlab
  7. 用Python解决数据结构与算法问题(一):Python基础
  8. 2022年网络搭建与应用——国赛FTP搭建 (解题步骤答案)
  9. 按键精灵多语言自动截图
  10. python @符号