暑假复建
7/8
The Untended Antiquity
题意:
给定 \(n\times m\) 的矩形,有三种操作:
1.以 \((x1,y1),(x2,y2)\) 为左上角和右下角建立一个围栏
2.删除以 \((x1,y1),(x2,y2)\) 为左上角和右下角的围栏
3.查询能否从 \((x1,y1)\) 走到 \((x2,y2)\)
保证合法
\(n,m \le 2500\)
\(q\le 10^{5}\)
建立一个围栏相当于给一个区域里未被染色的区域染色,同一个颜色的区域能互相到达。但是直接用二维数据结构以每次区间加 \(1\) 的方法会出现两个不同的区域颜色相同的情况,而我们要让每个区域颜色不同,可以使用 \(Hash\) 这一人类智慧的思想,这里个人习惯是使用 \(2^{45}\) 值域随机映射,将加 \(1\) 换成加 \(Hash\) 值就过了。
[NEERC2015] Jump
题意:
交互
给定长度为 \(n\)( \(n\) 为偶数) 的 \(01\) 字符串 \(S\) 。
你可以向交互库输出一个长度为 \(n\) 的 01 字符串 \(Q\)。设 \(S\) 和\(Q\) 有 \(k\) 个对应的位置上的字符相同。若 \(k=n\) 或 $k=\frac{n}{2} $,则交互库将返回 \(k\),否则交互库将返回 \(0\)。
你最多向交互库询问 \(n+500\) 次,要求求出 \(S\)。
\(n \le 1000\)
首先,第一次得到非零的结果基本不可能是 \(n\) ,一般只能得到一个匹配度为 \(\frac{n}{2}\) 的一个 \(01\) 串,我们先来考虑如果得到了一个这样的串该怎么得到答案。
假设第一位得到的是 \(1\) ,那么也不妨假设第一位答案是 \(0\),那么我们反转这个位,那么得到的串的匹配度为 \(\frac{n}{2}+1\) ,那么我们分别依次询问反转后面的位得到的串,如果返回值为 \(\frac{n}{2}\) ,那么这个位的答案为反转前的字符(除了第一位的字符每次询问的反转都是单独的)。那么我们得到了我们认为的答案串,但我们的第一位是假设的,所以询问答案串后要把答案串整个反转再询问一遍。这一步的询问次数是 \(n+1\) 的。
那么我们只要在 \(499\) 次询问内找到一个匹配度为 \(\frac{n}{2}+1\) 的串就行了,而随机 \(499\) 个串中没有这种串的概率为 \((1-\frac{\binom{n}{\frac{n}{2} } }{2^{n}})^{499}\),实际上约 \(0.00003\) ,所以 \(499\) 完全是够的。

浙公网安备 33010602011771号