Codeforces Round #584

Contest Info


[Practice Link](https://codeforc.es/contest/1209)
Solved A B C D E1 E2 F G1 G2 H
7/10 O O O O Ø Ø - O - -
  • O 在比赛中通过
  • Ø 赛后通过
  • ! 尝试了但是失败了
  • - 没有尝试

Solutions


A. Paint the Numbers

题意:
要给一个序列中每个数\(a_i\)染色,但是要保证同一种颜色的数的\(gcd\)等于这些数中的最小的那个数。问所需的最少颜色数

思路:
排序后,从最小的染起,没染就染,然后标记它的倍数都被染过

B. Koala and Lights

题意:
\(n\)个灯,每个灯有一个开关的周期,问某一时刻同时亮着的灯的数量最大是多少

思路:
只有\(100\)个灯,并且周期很小,直接暴力标记一下

C. Paint the Digits

题意:
\(n\)个数\(a_i \in [0, 9]\),现在要给每个数标上\(1\)或者标上\(2\),现在要使得将标上\(1\)的数都按顺序取出来,然后将标\(2\)的数按顺序取出来接在标\(1\)的数的后面。
使得这个序列是一个非递减序列
如果存在这样的方案,输出方案

思路:
考虑标\(2\)的数中最小的数肯定大于等于标\(1\)的数的最大的数。
枚举这个数,然后贪心即可。

D. Cow and Snacks

题意:
\(n\)个人,有\(k\)个餐品,每个人有两种非常喜爱的餐品,现在每种餐品都有一个,现在要求给\(n\)个人排个顺序,他们轮流去吃这\(k\)个餐品。
餐品吃掉之后就没了, 对于每个人来说,它吃餐品的策略如下:

  • 找是否有自己最喜欢的两种餐品,有就吃,如果两个都有,两个都吃
  • 如果吃到了,那么他就是快乐的人,否则就是不快乐的。

问如果安排这\(n\)个人的顺序,使得快乐的人尽量多。

思路:
首先,第一个人安排谁其实无所谓,因为安排谁都会吃掉两块。
我们考虑接下来的人中,肯定优先选其中一个最喜爱的餐品被吃掉的人,因为这样不会造成浪费。
\(DFS\)一下即可。

E1. Rotate Columns (easy version)

题意:
\(n \cdot m\)的矩阵,每一列可以循环移位,问如果移位后使得每一行的最大数之和最大。
\(1 \leq n \leq 4, 1 \leq m \leq 100\)

思路:
考虑最终结果只会在前\(n\)大列中的循环移位中产生,暴力枚举即可。

E2. Rotate Columns (hard version)

题意:
\(E1\)\(1 \leq n \leq 12, 1 \leq m \leq 2000\)

思路:
考虑最终结果只会在前\(n\)大列中的循环移位中产生,那么\(m\)就只有\(12\)了。
再考虑\(f[mask]\)表示哪些位被确定的状态下的最大值,显然最后的答案为\(f[(1 << n) - 1]\)
再枚举每一列的循环移位进行转移,假设已经确定了\(mask\),那么可以枚举\(mask\)补集的子集进行覆盖转移

G1. Into Blocks (easy version)

题意:
\(n\)个数\(a_i\),现在可以修改一些位置的数,使得每一种数最左的位置和最右的位置之间的数都是这个数。
求最小的修改次数。

思路:
考虑每一种数都有一个范围\([l, r]\),表示这个范围的数要相等。
那么将每种数的\([l, r]\)都取出来,合并后。
那么对于每个\([l, r]\),我们取这范围出现次数最多的数保留下来,其他数都修改掉

posted @ 2019-09-16 09:56  Dup4  阅读(417)  评论(0编辑  收藏  举报