P10635 BZOJ3517 翻硬币 Ad-hoc
首先翻转不太好做,考虑神仙结论(其实我不会)。
有个很牛的方法是,假设需要全部变为 \(1\),那么把 \(0\) 的位置对应的每行每列每个点都做一遍翻转操作,此时不难发现只更改了一个点,但是这样子操作次数是 \(O(n^3)\),非常不好,发现一个事情,同一个格子做两次显然是没有任何意义的,所以我的一个格子最多只做一次操作,所以操作次数量级就是 \(O(n^2)\) 的了。
但是题目并没有说是变成 \(1\) 还是变成 \(0\),所以要两种方法都跑一遍,于是你发现你过了。
一种证明不完全的方法是,起始状态有 \(2^{n^2}\) 种,然后操作序列也有 \(2^{n^2}\) 种,这很显然构成一个满射,也是一个双射(因为每个起始状态都能根据以上方法构造出一个操作序列)。
至于最优性,这个我真不会证,可能需要一些高超的技巧。

浙公网安备 33010602011771号