[POI2013] SPA-Walk 引理证明

题目链接

题目中给出了一个引理:将长度为 \(n\) 的所有 \(2^n\)01 串分成两个集合 \(A,B\),则 \(A\)\(B\) 中相似字符串(即只有一位不同的字符串)的对数不小于 \(\min\{A,B\}\)

翻遍各大网站也没找到该引理的证明,这不禁令人思来想去,寝食难安。

在进行了漫长的思考之后,笔者似乎找到了一种证明方法,记录在此,供大家讨论。

证明:

\(n\) 进行归纳,稍加讨论可以发现当 \(n\le 2\) 时结论成立。如果对 \(n(n\ge 2)\) 结论成立,那么对 \(n+1\)

01 串按第一个字符为 0 还是 1,字符 1 的个数为偶数还是奇数分为四类:\(U_{0,0},U_{0,1},U_{1,0},U_{1,1}\),其中 \(U\) 的第一个下标表示第一个字符为 0 还是 1,第二个下标表示字符 1 的个数为偶数(\(0\))还是奇数(\(1\))。

再记 \(S_{u,v}=A\cap U_{u,v}\)\(T_{u,v}=U_{u,v}\setminus S_{u,v}\),其中 \(u,v\in \{0,1\}\)

不妨设 \(|S_{0,0}|+|S_{0,1}|\le |T_{0,0}|+|T_{0,1}|\),否则交换 \(A,B\)。于是分为两类情况:

  1. \(|S_{1,0}|+|S_{1,1}|\le |T_{1,0}|+|T_{1,1}|\)

\(A_0=S_{0,0}\cup S_{0,1}\)\(B_0=T_{0,0}\cup T_{0,1}\),由归纳 \(A_0\)\(B_0\) 间的贡献不小于 \(\min\{|A_0|,|B_0|\}=|A_0|\)\(A_1=S_{1,0}\cup S_{1,1}\)\(B_1=T_{1,0}\cup T_{1,1}\) 的贡献情况同理,于是总贡献不小于 \(|A_0|+|A_1|=|A|\),证毕。

  1. \(S_{1,0}+S_{1,1}\ge T_{1,0}+T_{1,1}\)

由情况 \(1\) 已有贡献不小于 \(|A_0|+|B_1|\)

再设 \(|S_{0,0}|=2^{n-2}+a\)\(|S_{0,1}|=2^{n-2}+b\)\(|S_{1,0}|=2^{n-2}+c\)\(|S_{1,1}|=2^{n-2}+d\),有 \(-2^{n-2}\le a,b,c,d\le 2^{n-2}\),同时 \(T_{0,0}=2^{n-2}-a,T_{0,1}=\cdots\)

再统计 \(S_{u,v}\)\(T_{u \operatorname{xor} 1,v \operatorname{xor} 1}\) 的贡献,可以发现 \(S_{0,0}\)\(T_{1,1 }\) 的贡献不小于 \(\max\{a-d,0\}\),故四组贡献之和不小于 \(\max\{a-d,0\}+\max\{b-c,0\}+\max\{c-b,0\}+\max\{d-a,0\}=|d-a|+|c-b|\ge c+d-a-b\)

同时 \(|A_0|+|B_1|+c+d-a-b= 2^n\),必定不小于 \(A,B\) 中的较小者,证毕。

由此对所有非负整数 \(n\) 结论成立。

顺便一提之后的做法:

首先有暴力,从 \(s\) 开始搜索看是否能搜到 \(t\),如果搜到则有解,如果搜不到则则无解。

对于搜不到的情况,将点集分为已遍历过的点集 \(A\) 与未遍历的点集 \(B\) 进行观察,未遍历点集 \(B\) 有至多 \(k\) 个点与 \(A\) 有连边,因而 \(A,B\) 间有至多 \(nk\) 条边,从而 \(\min\{|A|,|B|\}\le nk\),也即如果无解必然有一个连通块大小不超过 \(nk\),那么只需要从 \(s\)\(t\) 分别出发各找一次是否存在大小不超过 \(nk\) 的连通块即可。时间复杂度 \(O(n^2k)\),实现优秀即可通过。

应该说删去这个提示题目会难很多(找出这个性质与证明都十分艰辛),但或许这正是应用数学的魅力所在吧。

posted @ 2022-03-28 19:37  林政宇  阅读(164)  评论(0编辑  收藏  举报