专栏文章

题解:P9324 [EGOI 2022] Chika Wants to Cheat / 出老千

P9324题解参与者 1已保存评论 0

文章操作

快速查看文章及其快照的属性,并进行相关操作。

当前评论
0 条
当前快照
1 份
快照标识符
@mion90kf
此快照首次捕获于
2025/12/02 21:58
3 个月前
此快照最后确认于
2025/12/02 21:58
3 个月前
查看原文
简要题意:
构造 67000000=6.7×10767000000=6.7 \times 10^7 种不同的在 2×22 \times 2 网格中绘制线段的方式,使得在旋转后仍然能够识别,其中线段的端点必须在整点上,并且除端点外不能经过其他整点。
注意这里的 2×22 \times 2 网格是有 99 个整点的。
先不考虑旋转。可以算出共有 9×8226=28\frac{9 \times 8}{2}-2-6=28 条不同的线段可以给我们画。那么可能的状态数就有 2282^{28} 种。
现在考虑旋转,发现 28=4×728=4 \times 7,并且刚好可以把 2828 条线段分成 77 组,每组里有 44 条线段,且组内的线段可以通过旋转获得。我们把一个状态压成一个 2828 bits 的整数 SS,每组线段压在相邻的 bit 里。
这样我们就可以用位运算快速算出一个状态 SS 旋转 9090 度后的状态 SS'
然后我们找出前 6.7×1076.7 \times 10^7 个满足以下条件的 SS 塞进一个 vector 内:
SS 小于等于 SS 旋转若干次后的状态 SS',即 Smin(S,S,S)S \leq \min(S',S'',S''')。(最小表示法)
构建图形时查表查出第 ii 个这样的 SS
查询图形时先变为最小表示,在 vector 中二分,这样就可以通过。
实测第 6700000067000000 小的 SS267717551267717551
时间复杂度 O(S67000000+qlogmaxn)O(S_{67000000}+q\log \max n)
其中 S67000000=267717551S_{67000000}=267717551,预处理部分常数很小,本地只需 0.5s,时限 2s 随便过。

评论

0 条评论,欢迎与作者交流。

正在加载评论...