日记
7.4
Codeforces Round 905 (Div. 3)
A
B
C
D
E
F
Codeforces Round 904 (Div. 2)
A
B
C
D
E
F
7.5
Codeforces Round 943 (Div. 3)
A
B
C
D
E
F
Codeforces Round 953 (Div. 2)
A
B
C
D
E
F
CF 1900
CF1624G
或意义下的最小生成树。
考虑拆位后从高到低位贪心,由于二进制的性质,因此可以枚举舍弃每一位对应的边后图是否仍然联通,如若联通则舍弃相对应的边一定是最优的。并查集判断即可。
https://codeforces.com/contest/1624/submission/268905549
7.6
AtCoder Beginner Contest 361
A
B
判断两个三面平行于坐标平面的立方体是否有交。
判断 \(x\) 轴范围,\(y\) 轴范围,\(z\) 轴范围是否均有交集即可。
C
D
有 \(n+2\) 个格子,前 \(n\) 个格子中每个格子有 \(B\) 或 \(W\) ,最后两个为空,每次挪动相邻两个字符至空格内,请问由 \(S\) 变换至 \(T\) 的最少次数,\(n\leq 14\) 。
\(n\) 范围较小考虑状压,暴力做三进制,记录每个位置分别是什么,复杂度 \(O(n 3^n)\) ,考虑到两个空格始终相邻,可简化状态,状态中仅包含长度为 \(n\) 的字符串和空格的位置即可,求最小次数只需要广搜即可。时空复杂度均为 \(O(n 2^n)\)
https://atcoder.jp/contests/abc361/submissions/55287530
E
求从任意一点起始遍历整棵树所经过的最小边权和。
考虑最优路径,从某个点出发到某个叶子节点停止,反证法容易证明。那么仅需换根处理即可。\(f(x)\) 表示遍历以 \(x\) 为根的子树并回到 \(x\) 的和,\(g(x)\) 表示遍历以 \(x\) 的父亲为根去除掉子树 \(x\) 的整个树的最小边权和, 加和后减去以 \(x\) 为根的最长链即可。以上均可通过两次 DFS 完成。
https://atcoder.jp/contests/abc361/submissions/55300868
F
问 \(n\) 以内的整数有多少能表示为 \(a^b\),\(b\geq 2\) 的形式。 \(n\leq 10^{18}\)
发现三次方以上的数极少,可以暴力枚举,对于完全平方,\(n\) 以内有 \(\sqrt{n}\) 个,检测上述数字中是否含有完全平方即可。
7.7
地球online
科目一94分。
Codeforces Round #956 (Div. 2)
A
B
矩形内部只有 0、1、2 三种数,每次操作可将一组对角的数加 1 后对 3 取余,另一组对角加 2 对 3 取余,问能否将 S 操作为 T 。
考虑每次操作不改变每行和每列之和对 3 取余的余数,因此依次判断每行每列是否相同,这是必要的,充分性待证明。
C
爱丽丝、鲍勃和查理想分享一个切成 \(n\) 块的长方形蛋糕。每个人认为每块蛋糕的价值都不同。爱丽丝认为 \(i\) 这一块的价值是 \(a_i\) ,鲍勃认为是 \(b_i\) ,而查理认为是 \(c_i\)。所有 \(a_i\) 、所有 \(b_i\) 和所有 \(c_i\) 的总和是一样的,都等于 \(tot\) 。考虑到每个人每块蛋糕的值,需要给每个人一块连续的蛋糕。换句话说,对于 Alice、Bob 和 Charlie 来说,这些子数组左端和右端的索引(给每个人的蛋糕片)可以分别表示为 \((l_a,r_a)\) 、 \((l_b,r_b)\) 和 \((l_c,r_c)\) 。分割需要满足以下约束条件:没有一个棋子被分配给多人,即 \([l_a,…,r_a]\) 、 \([l_b,…,r_b]\) 和 \([l_c,…,r_c]\) 中没有两个子数组相交。$ \sum_{i = l_a}^{r_a} a_i, \sum_{i = l_b}^{r_b} b_i, \sum_{i = l_c}^{r_c} c_i \geq \lceil \frac{tot}{3} \rceil $
仅需枚举顺序后,在第一段满足条件的情况下,指针定位第二段的最左位置,在判断第三段是否合法即可。考场上没想好直接写了个二分。
https://codeforces.com/contest/1983/submission/269255496
D
给定长度为 \(n\) 的两个不同正整数数组 \(a\) 和 \(b\) ,我们希望使这两个数组相同。长度为 \(k\) 的两个数组 \(x\) 和 \(y\) 在所有的 \(1≤i≤k, x_i=y_i\) 中都相同。一次操作,可以在 \(a(l≤r)\) 中选择索引 \(l\) 和 \(r\) ,并交换 \(a_l\) 和 \(a_r\) ,然后在 \(b\) 中选择 \(p\) 和 \(q(p≤q)\) ,使得 \(r−l=q−p\) ,并交换 \(b_p\) 和 \(b_q\) 。有可能使两个数组相同吗?
打表后发现是判断逆序对是否为偶数,证明待补充。
E
F
G
7.8
Codeforces Round 950 (Div. 3)
CF
CF1509C
CF1517D
7.9
Educational Codeforces Round 167 (Rated for Div. 2)
7.10
Codeforces Round 955 (Div. 2, with prizes from NEAR!)
https://codeforces.com/contest/1982
A
考虑转化为棋盘格上走路,本质上是从 \((x_1,y_1)\) 走到 \((x_2,y_2)\) 且不能跨越对角线,判断两个点是否在两侧即可。
B
大暴力显然无法通过,一个比较显然的优化是一次直接加到能被 \(y\) 整除的数,如果操作足够多,经过若干次操作后一定会出现 \(1\) ,因此会从 \(1\) 到 \(y\) 循环,直接取余即可,时间复杂度不会证明。但实测跑得飞快。
C
考虑 \(f_i\) 为前 \(i\) 张牌最多赢几次,暴力转移即为对于所有 \(L\leq sum(j,i)\leq R\) 的 \(j\), \(f_i = max_{f_j}+1\) 。到这里已经可以直接二分+线段树在 \(O(nlogn)\) 的时间内解决了。但是考虑 \(f\) 的性质,其单调不降,因此只需维护一个指针,即最大的满足 \(L\leq sum(j,i)\leq R\) 的 \(j\) 即可在 \(O(n)\) 的复杂度内解决。
D
考虑枚举每一个左上角的位置,其能改变的两种数之差的量必然为子矩阵内 0/1 个数差的倍数,因此预处理出所有子矩阵 0/1 个数差,根据裴蜀定理,有解等价于总差为所有个数差的 \(gcd\) 。
7.11
地球online
领毕业证,出去吃饭,打球。下回了几百年没有玩的吃鸡结果落地成盒了。
7.12
地球online
早上五点半起床去驾校学车,VR 太难玩了,曲线转弯短短不到一百米压了 96 次线,古希腊掌管驾驶技术的神。
codeforces Round 951 (Div. 2)
https://codeforces.com/contest/1979
C
考虑到对于每个 \(i\) 都需要满足 \(x_i\geq \frac{s}{k_i}\) ,那直接看 \(\sum{\frac{1}{k_i}}\) 是否严格小于 1 即可,大于等于 1 则无解,小于 1 直接令 \(S\) 为所有 k 的 lcm。
7.13
地球online
玩 VR 太困了睡着了,被教练当场抓包。侧方停车直接停马路牙子上了,我实在是太强大了。
AtCoder Beginner Contest 362
居然有两个板子。。。