编辑文章 - 题解:CF665D Simple Subset
很显然,这是一道构造题。
思路
我们以惊人的注意力发现,其实答案只有 \(4\) 种情况:
-
全是 \(1\),任意两个加起来都是 \(2\)。
-
在 \(m\) 个 \(1\) 后面还有一个数 \(x\),其中 \(x+1\) 为质数。
-
有两个数 \(x\) 和 \(y\),其中 \(x+y\) 为质数。
-
只有一个数 \(x\)。
很多人想问为什么在 \(m\) 个 \(1\) 后面只有一个数 \(x\) 呢?我们用反证法,假设后面有两个数 \(x\) 和 \(y\) 其中 \(x,y \ne 1\),由于 \(x+1\) 为质数,所以 \(x\) 必为偶数,那么 \(x+y\) 也得是质数,所以 \(y\) 为奇数,但 \(y+1\) 就为偶数,所以矛盾。
代码实现
对于前两个构造还是很好实现的,对于后面两个构造我们用素数筛先筛出素数后,再进行二分查询即可。(素数筛的空间要开大两倍)
代码很好写,这里就不放了。
这里给出 \(2\) 组 Hack。
Hack
Input \(1\):
2
999996 999997
Output \(1\):
2
999997 999996
Input \(2\):
3
1 5 8
Output \(2\):
2
5 8

浙公网安备 33010602011771号