AT_wtf19_c2 Triangular Lamps Hard 题解
:::::info[题目基本信息]
考察:构造,Ad-hoc,数位 DP,二分,倍增(无评分)。
题目简介:
一个网格图,原来上面有一个黑点
- 选定
x,y ,让(x,y),(x,y+1),(x+1,y) 中黑点变成白点,白点变成黑点。
最终有
数据范围:
-
-
- 保证有唯一解。
时间限制:4s。
空间限制:1G。
:::::
:::::info[闲话]
这题是人能想到的???
没有人类了。
可以数数本篇文章有多少“注意到”。
:::::
注意到这个题没有像 CF2096D 那样优美的性质,所以这个题直接做超级难做,所以我们考虑转到一条直线上,就取
注意到我们将这些点通过操作转化到
这时我们注意到一个点被贡献奇数次才能真正被贡献,所以若
注意到这一些黑点所贡献在这条直线上的黑点与原点所贡献的相同,所以我们找到这些黑点中的最左点和最右点就可以确定原点坐标了。
这样时间复杂度为
注意到我们并不需要找到所有贡献到这条直线上的黑点,找到最左点和最右点就足够了,所以我们考虑如何找到这两点。
注意到最左点的
现在我们只需要得到一个落在直线上的黑点。
观察翻转的点注意到
这有什么用呢?
注意到一段区间内点数的奇偶性是好算的,直接数位 DP 即可,所以我们考虑二分。
具体地,定出一个足够大的区间(列不等式算一算可以得到是
然后就做完了。
时间复杂度为
code