∗ 1400 , ∗ 1500 , ∗ 1700 ^*1400, ^*1500, ^*1700 ∗1400,∗1500,∗1700
B. Composite Coloring
题意:给 n n n 个合数( a i ≤ 1000 a_i ≤1000 ai≤1000), 你要将其分为至多 11 个集合,使这些集合满足集合内的元素两两不互质。
题解:codeforces B. Composite Coloring
思路:发现 1000 以内的任意合数一定存在前 11 个质数中的某个质数作为因子,那么让每个质数的倍数都分为一组,就可以预处理完全分类了。最后因为输出有要求,模仿 y总 讲的非保序离散化,用数组映射即可。
AC代码:https://codeforces.com/contest/1332/submission/152664616
F. Binary String Reconstruction
题意:对于一个01串,我们把每一个相邻的数字对记录,记录数对中1的个数,n0表示00的个数,n1表示01和10的个数和,n2表示11的个数。给定n0、n1、n2,反构造一个符合的字符串,保证存在答案。
思路:先构造 00,然后 11,最后 01 的话在字符串末尾 01 交替即可。
AC代码:https://codeforces.com/contest/1352/submission/152752633
D. Ehab the Xorcist
题意:
构造出最短的一个数组,使得:
- 所有元素异或的结果为 u
- 所有元素之和的结果为 v
思路:首先,异或是不进位的加法,满足不等式 a ⨁ b ≤ a + b a \bigoplus b ≤ a + b a⨁b≤a+b ,而且进位一定是偶数,也就是 ( a + b ) − ( a ⨁ b ) = 2 ∗ k ( k ∈ N ) (a+b)-(a \bigoplus b)=2*k (k∈\N) (a+b)−(a⨁b)=2∗k(k∈N) ,即可判断存在性。
若存在答案且 u ≠ v u≠v u=v,我们可以构造长度为 3 的数组: ( v − u ) / 2 , ( v − u ) / 2 , u (v-u) / 2, (v-u) / 2, u (v−u)/2,(v−u)/2,u,其中 v − u v-u v−u 就是进位而消失的部分。然后发现数组还可以更短,也就是 ( v − u ) / 2 (v-u)/2 (v−u)/2 和 u u u 异或没有进位时可以合并。
AC代码:https://codeforces.com/contest/1325/submission/157114499