重生之我是国家队员
前言

接下来的两个月我将退出综合,转入信息竞赛。
但是反方向的钟怎么还一个字都没有写,我要生气啦!!!
新年的 \(\text{QAQ}\)
\(\text{Part I}\)
考虑这样一个程序用于计算 a op b 的正确值:
x = a op b
y = a op b
z = x - y
if z goto 1
得益于运算错误时随机取值的范围很大,所以基本可以保证正确。
\(\text{Part II}\)
对于改之后的题,运算错误时的取值为正确答案异或 \(1\),且限制程序运行时执行的语句总数不超过 \(35000\)。
这时上面的代码不能再保证正确,但相比于直接运算,正确率仍有提升。
所以考虑多来几遍,每次的 \(z\) 若不为 \(0\) 就回到开头重算:
x = a op b
y = a op b
z = x - y
if z goto 1
y = a op b
z = x - y
if z goto 1
...
但这样的语句数会过多,考虑每次 \(z\) 不为 \(0\) 不一定是 \(x\) 错了,也有可能是 \(y\) 错了,那么这时回到开头就很亏。
那么我们不从头开始,而是跳转到上一轮计算的开头即可。
这个过程可以抽象为一个随机游走的模型,经过计算,\(10\) 次左右的验证即可基本保证正确。
梦幻折纸
先考虑一维的情况。
从折纸的侧视图入手,发现在一开始相邻的两个格子之间一定存在一条折痕,而这条折痕要么在左边要么在右边。
每条折痕的方向在一开始的纸条上一定形如:左右左右左……
那么要判断最终能否折成 \(1\sim n\),可以先假设折出了这个形状,再判断同侧的折痕之间是否出现相交的情况即可,如果相交就说明不合法。
二维的情况是类似的,只不过折痕方向变成了四种。
判相交需要用树状数组,总复杂度 \(O(tnm\log_2{nm})\)。

浙公网安备 33010602011771号