ARC199A Flip Row or Col 2 题解

ARC199A Flip Row or Col 2 题解

很妙的思维题,不需要任何算法。

我们首先得出几个观察:

  • 操作的顺序是无关紧要的,不妨假设所有的行操作都在列操作之前,这或许可以简化问题。
  • \(R_i, C_i < \frac{N}{4}\) 可能有关键作用。
  • 题目不要求最小化操作数量。可以先通过一些操作,把局面转化成具有某个特殊性质的初始状态,再从这个状态出发解决问题。

不妨先通过一些列操作把第 \(1\) 行全部变成 \(0\),那么以后列操作的次数恰好是 \(R_1\)。然后假设之后所有的行操作都在列操作之前。现在实际上能过确定每一行是否要翻转:设第 \(i\) 行现在有 \(x\)\(1\),假设不翻转这一行,那么经过 \(R_1\) 次列操作之后第 \(i\) 行的 \(1\) 的数量在 \([x - R_1, x + R_1]\) 之间(当然要和 \([0, N]\) 取交集)。由于 \(R_i < \frac{N}{4}\),所以只有当 \(x < \frac{N}{2}\) 时才有可能满足这一行的限制。

因此,我们必须让第 \(i\) 行的 \(1\) 数量小于 \(\frac{N}{2}\)。如果 \(x < \frac{N}{2}\),那么不用翻转;如果 \(x > \frac{N}{2}\),那么一定要翻转;否则 \(x = \frac{N}{2}\),此时翻不翻转都一样,直接寄了。

确定了行操作以后问题就简单了:对于第 \(i\) 列,如果 \(1\) 的个数为 \(C_i\),则不用翻转;如果 \(1\) 的个数为 \(N - C_i\),则需要翻转,否则无解。做完列操作之后再判断行的限制是否被满足即可。

代码

posted @ 2025-06-02 21:30  DengStar  阅读(35)  评论(0)    收藏  举报