暑假复建

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\) 完全是够的。

Pastoral Oddities

jimmy's

posted @ 2023-07-10 18:41  shihoghmean  阅读(16)  评论(0)    收藏  举报