专栏文章

题解:P13381 [GCJ 2011 #3] Mystery Square

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

文章操作

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

当前评论
0 条
当前快照
1 份
快照标识符
@mio07f2r
此快照首次捕获于
2025/12/02 11:13
3 个月前
此快照最后确认于
2025/12/02 11:13
3 个月前
查看原文
翻译一下附件里的题解。
直接枚举 2402^{40} 种情况不可能,所以考虑分治。
设问号数为 qqt=S2t=\lfloor \frac {|S|} 2 \rfloor,下文中 nnSS 代表的数。
记最低 tt 位为低位,其他为高位。
我们有两种算法。

算法 1:从顶到底的搜索

此算法用于解决高位的问号数较少的情况。
搜索前一半的问号,直到剩下最低 tt 位。
LL 为此时把低位所有 ? 设为 00 的值,RR 为此时把低位所有 ? 设为 11 的值。那么可能的 xx 范围显然为 LxR\sqrt{L} \leq x \leq \sqrt{R}
然后你会发现,如果 xxx+1x+1 同时在范围内,则 Lx2<(x+1)2RL \leq x^2<(x+1)^2 \leq R
但是因为 xL2tx \geq \sqrt{L} \geq 2^t 所以 RL<=2t<2x+1=(x+1)2x2R-L<=2^t<2x+1=(x+1)^2-x^2,所以范围内至多只有一个数,配合 O(logn)O(\log n) 的开根可以做到 O(2q2logn)O(2^{\frac q 2}\log n)

算法 2:从底到顶的搜索

此算法用于解决低位的问号数较少的情况。
首先我们假设 x1(mod 2)x \equiv 1 (\bmod \ 2),因为对于 x0(mod 2)x \equiv 0 (\bmod \ 2) 的情况,直接把最低的 22 位设成 00 然后砍掉递归即可。
然后我们考虑如何用模 2k12^{k-1} 可能作为答案的 xx 推出模 2k2^{k} 可能作为答案的 xx
y{0,1,2,3}y \in \{0,1,2,3\}0x<2k10 \leq x < 2^{k-1},我们有 n(2k1y+x)2(22k2y2+2×2k1yx+x2)(mod 2k+1)n \equiv (2^{k-1}y+x)^2 \equiv (2^{2k-2}y^2+2 \times 2^{k-1}yx+x^2) (\bmod \ 2^{k+1})
不妨假设 2k2k+12k-2 \geq k+1,即 k3k\geq 3,对于 k2k \leq 2 直接枚举一下即可。
然后可以得到 n2kxy+x2(mod 2k+1)n \equiv 2^kxy+x^2 (\bmod \ 2^{k+1})
又因为 x1(mod2)x \equiv 1 (\bmod 2),所以 n2ky+x2(mod2k+1)n \equiv 2^ky+x^2 (\bmod 2^{k+1}),即我们可以确定 yy 的奇偶性,那么就可以求出模 2k2^k 意义下 xx 的值。
那么我们只需要让 k=t+1k = t+1,这时因为 22tn<22(t+1)2^{2t} \leq n < 2^{2(t+1)},所以直接把模 2t2^t 意义下的可能作为答案的 xx 检查即可,并且由这个可以看出是 nnxx 是一一对应的。
于是我们只需要搜索 O(2q2)O(2^{\frac q 2}) 种情况并且边搜索边算出 xx 即可。
然后再考虑一下加上递归的总复杂度,你会发现这个总复杂度会是 O(2q2logn)O(2^{\frac q 2}\log n) 的。
两个算法拼起来,总复杂度为 O(2q2logn)O(\sum 2^{\frac q 2}\log n),可以通过。

评论

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

正在加载评论...