A - Burenka Plays with Fractions

Problem - A - Codeforces

题意

给你两个分数,你可以让分母或者分子乘上一个数,问最少多少次操作可以让他们分母相同(需要约分)

题解

纯模拟,细节较多。

1
2
3
4
5
6
7
8
9
10
ll g1 = __gcd(a, b), g2 = __gcd(c, d);
a /= g1, b /= g1, c /= g2, d /= g2;
if(a == 0 && c == 0) return printf("0\n"), void();
if(a == 0 || c == 0) return printf("1\n"), void();
ll p = a * d, q = b * c;
ll g = __gcd(p, q);
p /= g, q /= g;
if(p == 1 && q == 1) printf("0\n");
else if(p * q == p || p * q == q) printf("1\n");
else printf("2\n");

B - Interesting Sum

Problem - B - Codeforces

题意

对于一个长度至少为 $4$ 的序列,你可以选择一段区间删去,使得删去的序列中的极差和剩下序列中的极差之和最大。

题解

很显然能对答案造成贡献的只有最大最小次大次小,且较大值对答案的贡献一定为正,较小值对答案的贡献一定为负,那么答案即为最大加次大减最小减次小,$O(n)$ 可解。

C - Corners

Problem - C - Codeforces

题意

给出一个 $n\times m$ 的矩阵,其大小最小为 $2\times 2$ 。每次可以选择一个 $2\times 2$ 并使得一个 L 形区块变为 $0$,问把矩阵全部变成 $0$ 需要操作多少次。

题解

注意到只要有两个连在一起的 $0$ 就可以通过一次删除操作消除一个 $1$ 。而出了第一次操作以外都一定可以找到连在一起的 $0$,那么答案显而易见了。只需要特判第一次删除最少删去多少一,然后数一下剩下的 $1$ 即可。

D - Xor-Subsequence

Problem - D2 - Codeforces

题意

给出一序列 $a$,下表从 $0$ 开始,你需要选择一个最长的递增下标序列 $b$ ,其满足 $a_{b_i}\oplus b_{i+1}\lt a_{b_{i+1}}\oplus b_i$,输出他的长度。

题解

我不会。

E - Misha and Paintings

Problem - E - Codeforces

题意

给出一个 $n\times n$ 矩阵,每次可以选择一个正方形子矩阵将其覆盖为 $1\sim n^2$ 中任意一种数字。问将矩阵中的不同数字数量变为 $k$ 的最小操作次数。

题解

记初始时矩阵不同数字数量为 $cnt$,那么对 $cnt$ 进行分类讨论。

  1. $cnt\ge k$:显然直接输出 $cnt-k$ 即可,因为我们可以直接把不同的数替换掉。
  2. $cnt\lt k$: