CF1158B The minimal unique substring 做题记录

构造一个长度为 nn0101ss,使得:

  • 任意长度小于 kk0101 串,或者不是 ss 的子串,或者在 ss 中出现了至少 22

  • 至少存在一个长度为 kk0101 串,在 ss 中出现了恰好一次

保证 nk(mod2)n\equiv k (mod 2)

1kn1051\le k\le n\le 10^5

构造方法:设 l=nk2l=\frac{n-k}{2},那么 si=[imod(l+1)1]s_i=[i\operatorname{mod} (l+1)\ge 1]

证明:

这样构造出来的 ss 一定是形如 [111110][111110][111110][11111][1111\dots10][1111\dots10][1111\dots10][11111] 这样一段一段的,除了最后一段之外的每一段都是由 ll111100 组成的。

先证明一定至少有一个长度为 kk 的子串只出现了一次,可以证明 s[l+1,nl]s_{[l+1,n-l]} 这个的长度为 nnk2nk21+1=kn-\frac{n-k}{2}-\frac{n-k}{2}-1+1=k 的子串一定是只出现一次的,因为它的开头是 sl+1=0s_{l+1}=0,而下一个最靠左的 00 却在 s2l+2s_{2l+2},但是 n2l2+1=nn+k2+1=k1<kn-2l-2+1=n-n+k-2+1=k-1<k,容不下一个长度为 kk 的字符串。

再来证明一定每个长度 <k<k 的子串都出现了至少两次,设长度为 tt,开头位置为 pp。若 pp 不在第一段,显然往左移动一段即可找到相同的子串;若 pp 在第一段,那么往右移动一段即可。往左移动显然不会超出边界,下面来证明往右移动也不会超出边界:

显然最坏情况是 p=l+1p=l+1t=k1t=k-1,那么由于 2l+2+k11=2nk2+k=n2l+2+k-1-1=2\frac{n-k}{2}+k=n 所以右端点不会超出 nn

综上,得证。