Codeforces Round 865 (Div. 2)

A

  • 判断中间是否有格点,显然就是最大公因数为 1,注意考虑 0 的情况
  • 既然能走两步且不用最优,则默认两步,第一步横坐标走到 x - 1 位置(注意 x 等于 1 的情况要特判 2),纵坐标的要求即是与 x - 1 互质,第二步因为横坐标相差 1,显然怎么走都没有格点。
  • 即考虑一个与 x - 1(x + 1 当目标坐标为 1 时)互质的数,考虑两个在 1e5 范围左右的质数,显然对于 $x \le 1e9$,最多只有包含一个质数

  • 看了官方题解,是我脑子抽了,注意到 1 的互质性质,显然可以构造第一步出现一个 1,第二步也出现一个 1,即第一步走 (x - 1, 1),第二步走 (1, y - 1)

B

  • 此题也是体现了似是而非的贪心的重要性(严格证明的贪心在比赛中没有必要,但一定要有一定道理)

  • 此题考虑到在 (row + col) & 1 == 0 的位置上一定是加法,其余位置减法,要想最大,一定是将较大的数放在 (row + col) & 1 == 0 的位置上,较小的数放在其余位置上

  • 再注意到此题的要求是使最小值最大,显然是要用平均的思想

  • 所以我们的策略是先将一定会加的位置,即终点和起点赋最大和次大值

    再对于位置 (0, i)(1, i - 1) 如果是 (0, i) 是减法,且 (0, i) 减的值多 1,则在 (0, i + 1) 位置上(加法),多加 1

  • 严格证明或其他构造可以参考官方题解

C

  • 看到单调不递减,考虑差分
  • 一次操作即是让 pos 位置和 pos + 2 位置前增后减或前减后增,显然可以按奇偶分开考虑,加入 0 位置占位利于操作
  • 如果 n 为奇数,则加入 0 位置后总位数为偶数,且对于奇数和偶数位置上都有一个可以任意操作位,所以存在
  • 如果 n 为偶数,则加入 0 位置后对于偶数位置上的数有两个任意可以操作的位,所以对于偶数显然成立,考虑奇数并贪心,即是前缀和小于等于 0

  • 突然发现主流的差分好像是后减前 :)

D

  • 很妙的一道题,看了 jiangly 的加边方式才做出来。即考虑加 nn + 1 这样所有点就连成了一条链,考虑 $p_1$ 到其他点的距离,距离最远的点即是链的端点。而链的左右端点的情况正好对应题目的两次答案尝试!
  • 所以分别考虑,求公式即可

细数一下自己犯的 sb 错误

  1. 加边没看出来
  2. 逻辑错误,将两种位置搞反,写代码时没认真,且检查代码不仔细
  3. 推公式太慢
  4. 数组下标相对位置写错
  5. 实现硬伤,题解写的很简单,我写的过程异常复杂

E

这是我印象中第一道独立解出的 codeforces 2200 题 :) 具有纪念意义

  • 首先是题目要看懂,注意是出现了 $a_i$ 才出现 $b_i$,反之不然

  • 其次注意到 1 的特殊性,只会出现 1 次

  • 考虑与 1 有关的点,显然最多只能出现 2 次。再考虑到与 1 相关的点且互相相关的点,发现可以都按同一个顺序来排,再将 1 夹在中间则所有条件都满足

  • 再考虑与(与 1 相关的点)相关的点,显然最多出现 3 次,也是将其夹在中间。发现如果此类点如果也与 1 相关,则需要退化为与 1 相关的点

  • 结合以上稍加思考,发现即是求各点到 1 的最短路(因为长路会被退化),长度 + 1 即是出现次数。如果视同样长度为 1 层,写成杨辉三角的包夹形式(即将同样长度的数字按同一个顺序视为一个整体,在 i 层就与上层错位写 i 个)

    相邻两层的错位关系即是一定需要的包夹关系,剩下就是找一种方式构造这种包夹关系,发现可以按自左下向右上的斜线添加即可


回顾此题犯的 sb 错误

  1. 单向边加成双向边(题目没看清)

  2. 用 floyd 跑 1e3 的数据 ??????

    且发现数据范围,跑最短路完全可以用 bfs,我却用 dij (虽然也很好写)

  3. 用字符表示一个多位数 ????


这也启示自己不要畏难,且做题不要走神 :)


Codeforces Round 865 (Div. 2)
https://lllei.top/2023/04/10/contest9/
作者
Lei
发布于
2023年4月10日
许可协议