Codeforces Round #586

Contest Info


[Practice Link](https://codeforc.es/contest/1207)
Solved A B C D E F G
4/7 O O O Ø - - -
  • O 在比赛中通过
  • Ø 赛后通过
  • ! 尝试了但是失败了
  • - 没有尝试

A. Cards

签到。

B. Multiplication Table

题意:
给出一个\(n \cdot n\)的矩阵,\(a_{i, j} = b_i \cdot b_j\),现在告诉你\(a_{i, j}(i \neq j)\),要你还原出\(b_i\)

思路:
考虑\(a_{1, 2} \cdots a_{1, n}\),我们发现\(b_1\)肯定是这些数的\(gcd\)的因数,那么枚举因数,\(n^2\)判断即可

C. Substring Game in the Lesson

题意:
给出一个字符串,问你刚开始有个子串\(S[l, r]\),现在要求找一个\(l' \leq l, r' \geq r\),使得\(S[l', r']\)的字典序小于\(S[l, r]\)
两个人轮流操作,谁不能操作谁输,问两个人最优操作下,对于每个\(i\)\(l = r = i\),谁会胜利?

思路:
显然,如果可以找到一个\(l', r'\),那么我们肯定可以找到最左的\(l'\),使得下一个人没办法操作。
现在\(l = r = i\),如果存在字典许比它小的,显然是第一个字母就比\(S_i\)小。
那么问题转化成,对于每个\(i\),是否存在一个\(j(j < i)\)并且\(S_j < S_i\)

D. Alex and Julian

题意:
有一个集合\(B\),以及所有的整数组成的点,对于一个整数\(i\),那么该点的标号为\(i\),现在如果两个点\(i, j\)满足\(|i - j| \in B\),那么\(i, j\)之间有一条无向边。
问至少删去\(B\)中多少个数,使得所有点按要求连完边之后该图是一个二分图。

思路:

  • 没有奇圈的图是一个二分图

考虑\(x, y\),假设从\(1\)出发,往后连边,那么他们相遇的点是\(lcm(x, y) + 1\),那么这个环的边数是:

\[\begin{eqnarray*} \frac{lcm(x, y)}{x} + \frac{lcm(x, y)}{y} = \frac{x}{gcd(x, y)} + \frac{y}{gcd(x, y)} \end{eqnarray*} \]

我们发现要使得这个式子不能为奇数,那么显然有偶加偶或者奇+奇。
我们考虑先将两个数都尽可能除\(2\),直到这两个数的公约数中没有\(2\)为止。
然后再来判断,那么现在至少有一个数是奇数,假设为\(x\),那么剩下的公约数肯定是个奇数。
那么考虑剩下的\(x, y\)

  • 如果\(x, y\)都是奇数,那么除掉一个奇数后还是奇数。
  • 如果只有一个是奇数,那么偶数的那个除掉一个奇数还是偶数,奇数那个除掉奇数还是奇数,那么就是奇 + 偶 = 奇,不合法

所以所有可以共存的数必然满足他们的最低二进制位一样。

posted @ 2019-09-19 22:08  Dup4  阅读(161)  评论(0编辑  收藏  举报