ALL:6
AC:4
补题:0
Rank:521
B. GCD Problem
题意:略。
思路:要构造 a , b a,b a,b 且 a + b = n a+b=n a+b=n 满足 gcd ( a , b ) = 1 \gcd(a,b)=1 gcd(a,b)=1 ,可以从 n 2 \frac n 2 2n 开始暴力枚举即可。这样可以理解为均摊 O ( 1 ) O(1) O(1) 的。
AC代码:https://codeforces.com/contest/1617/submission/177520270
C. Paprika and Permutation
题意:
有一个长度为 n n n 的数组 a 1 , a 2 , … , a n a_1,a_2,\dots,a_n a1,a2,…,an。每次操作你可以选择数组中的一个元素 a i a_i ai 和 x x x,然后将 a i a_i ai 替换为 a i m o d x a_i\bmod x aimodx。
求至少要多少次操作才能够将数组 a a a 变为一个 1 1 1 到 n n n 的排列。如果无法实现,输出 − 1 -1 −1。
数据范围:
- t t t 组数据, 1 ⩽ t ⩽ 1 0 4 1\leqslant t\leqslant 10^4 1⩽t⩽104。
- 1 ⩽ n ⩽ 1 0 5 1\leqslant n\leqslant 10^5 1⩽n⩽105, ∑ n ⩽ 2 × 1 0 5 \sum n\leqslant 2\times 10^5 ∑n⩽2×105。
- 1 ⩽ a i ⩽ 1 0 9 1\leqslant a_i\leqslant 10^9 1⩽ai⩽109。
思路:枚举 1 ∼ n 1\sim n 1∼n 的每一个数,如果在集合里,就标记为已填充,然后删除集合中对应数字。否则为未填充。
然后从小到大枚举集合的数,看看能不能填充排列中的未填充数字。一个数 a a a 被 1 ≤ x < a 1\leq x<a 1≤x<a 的任意数取模,值域一定是 [ 0 , ⌈ n 2 ⌉ − 1 ] [0,\lceil \frac n 2 \rceil -1] [0,⌈2n⌉−1] 且是满射的。
AC代码:https://codeforces.com/contest/1617/submission/177521799
D1. Too Many Impostors (easy version)
题意:略。见 洛谷 。
思路:枚举每三个相邻的人。可以发现,两个相邻的三元组 ( a i , a j , a k ) , ( a j , a k , a l ) (a_i,a_j,a_k),(a_j,a_k,a_l) (ai,aj,ak),(aj,ak,al) ,如果返回值不相同,可以推理得出两个位置 i , l i,l i,l 上是好人还是坏人。那么就可以利用这两个人推出来其他人是好还是坏。由 k k k 的范围也可以知道三元组返回值必然有 0 0 0 和 1 1 1 。
AC代码:https://codeforces.com/contest/1617/submission/177525425
D2. Too Many Impostors (hard version)
题意:略。
待补。