Codeforces Round 959 sponsored by NEAR (Div. 1 + Div. 2) 题解 (A~D)

赛时想出了D,但是做法写繁了,调了很久没调出来。码力不够、代码写太少导致的。

A

\([{\color{green} ▲ }]\) 签到

\(b_{i,j} = (a_{i,j} \bmod nm) + 1\) 即可使 \(b_{i,j} \ne a_{i,j}\),特判 \(nm=1\) 无解。

B

\([{\color{green} ▲ }]\) 结论

考虑简化操作,可以发现操作两次 \((i-j+1, i)\)\((i-j, i-1)\),重复的部分被异或了两次,该操作等价于 \(s_i \rightarrow s_i \oplus s_j(j \le i)\),为消除后效性,从后往前做,当:

\(s_i=1,t_i=0\) 时,\(s_i\) 需要异或上一个 1。
\(s_i=0,t_i=1\) 时,\(s_i\) 也需要异或上一个 1。

维护一下 \(s_j(j \le i)\) 等于 1 的个数就行了。

C

\([{\color{green} ▲ }]\) DP

\(g\) 的最终值不为零的方案数不好统计,正难则反,考虑统计最终 \(g\) 为零的方案数。

\(f_i\) 表示从 \(i\) 开始吃蘑菇使 \(g\) 的最终值为零的方案数, \(nxt_i\) 表示从 \(i\) 开始右边第一个 g 为零的位置,若没有则等于 \(n+1\),则有转移:

\[f_i=f_{nxt_i + 1}+1 \]

边界 \(f_{n+1}=0\),则答案就是:

\[\frac{n(n+1)}{2} - \sum _{i=1} ^{n} f_i \]

D

\([{\color{red} \times }]\) 数学

\(\lvert a_u - a_v \rvert\) 能被 \(x\) 整除等价于 \(a_u \equiv a_v \bmod x\)

看到样例里没有无解的情况,可以猜测问题肯定有解,尝试构造一下 \(n=\{2,3,4\}\) 时的无解数据,发现不存在。

操作顺序对答案没有影响,考虑倒着加边,那么在进行了编号为 \(x\) 的操作后,图中就会有 \(x+1\) 个连通分量,我们我们从每个连通分量中任选一个数字共 \(x+1\) 个数字,而 \(r \bmod x\) 的结果只有 \(x\) 个,根据抽屉原理,一定存在 \(a_u \equiv a_v \bmod x\)。注意连通分量中可以任选数字就行了。

posted @   EnochYoung  阅读(50)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 分享一个免费、快速、无限量使用的满血 DeepSeek R1 模型,支持深度思考和联网搜索!
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· ollama系列01:轻松3步本地部署deepseek,普通电脑可用
· 25岁的心里话
· 按钮权限的设计及实现
点击右上角即可分享
微信分享提示