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_{n+1}=0\),则答案就是:
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\)。注意连通分量中可以任选数字就行了。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 分享一个免费、快速、无限量使用的满血 DeepSeek R1 模型,支持深度思考和联网搜索!
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· ollama系列01:轻松3步本地部署deepseek,普通电脑可用
· 25岁的心里话
· 按钮权限的设计及实现