外观
循环赛最大休息时间问题(草稿)
问题引入
在比赛中,我们要确保运动员有充足的休息时间。基于这一背景,73Dsi 在 11 月 16 日发布了这一问题:
原始问题
n (n≥5) 个人打循环赛,证明存在一种安排比赛顺序的方式,使得一个人不会连续打两场比赛。
这个问题是简单的。在此基础上,我们可以进行推广,继续探究能否将一个人打两场比赛的间隔提高。
问题
n (n≥3) 个人打循环赛,每个人的最短比赛间隔的最大值 g 是多少?
上界
我们将 p 和 q 的比赛记作 (p,q)。
因为 n≥3,所以至少有 3 场比赛。
记前 (g+2) 场比赛分别为 {(p1,p2),(q1,q2),…,(q2g−1,q2g),(r1,r2)},由间隔为 g 有:
- pi,qi,ri 分别各不相同;
- p1,p2,r1,r2∈/{q1,q2,…,q2g};
- (p1,p2)=(r1,r2)。
于是 n≥{p1,p2,q1,q2,…,q2g,r1,r2}≥2g+3,整理可得
g≤⌈2n⌉−2
如果存在一种构造能达到 ⌈2n⌉−2 的间隔,就能证明 g=⌈2n⌉−2。
简单情况与拆分
为了避免一上来就写出一大坨形式化构造,我们先从直观的画图讲起。
把每个人画成一个点,用两个点的连线表示一场比赛,我们就能得到像下面一样的图:
然而这个图太复杂了,我们先来探究一些简单的图。
圈与链
圈与链是两种较简单的图。在圈和链上面,我们很容易达到 g=⌈2n⌉−2 的上界,只需要给各个比赛标号,然后先按标号从小到大取奇数标号的比赛,再按标号从小到大取偶数标号的比赛即可,如下图:
(上图的数字是比赛的标号,不是比赛顺序)
Walecki 分解
于是我们有一种构造思路:将所有比赛拆成若干个圈/链,然后分别处理这些圈/链。而 Walecki 在百年前给出了如下图的巧妙构造:
(左图是对于偶数个点的图的构造,在它的基础上增加一个点,即有右图的奇数构造)
基于 Walecki 的构造,我们便得以拆分问题。
错位构造
在每个圈/链上解决问题还不够,我们还需要保证它们合起来之后不会出现新的冲突。而得益于 Walecki 构造的高度对称性,我们有如下的安排方式,恰好将相近的边错开:
上图可以让我们直观地理解最终的构造。此处我们不用上图对其进行证明,形式化的构造和证明将在下面给出。
形式化构造及证明
接下来,我们就要进入复杂的形式化证明了。
为了方便地表示构造,约定序列拼接符号:
约定
{a1,a2,…,an}#{b1,b2,…,bm}={a1,a2,…,an,b1,b2,…,bm}
i=1#nAi=A1#A2#⋯#An
与其他序列拼接时,只有一项的序列可以省略大括号。
偶数情况
构造
设 n=2m,记所有顶点为 ai,i=0,1,…,2m−1,有构造
i=1#m(j=1#m(ai−j,ai+j−1))#(j=1#m−1(ai−j,ai+j))
(下标 mod2m)
满足 g=m−2=⌈2n⌉−2。
证明
将构造分割为子串 Ai=j=1#m(ai−j,ai+j−1),Bi=j=1#m−1(ai−j,ai+j),
因为 Ai,Bi 内部不重且长度均 ≥m−1,要证此构造在 (m−1) 轮内的点(选手)不重复,只需证相邻子串长度和为 m−1 的前后缀的点不重复。
记 Pl(Ai) 为 Ai 的长度为 l 的前缀包含的点,Sl(Ai) 为 Ai 的长度为 l 的后缀包含的点,类似地定义 Pl(Bi),Sl(Bi),则
Pl(Ai)Sl(Ai)Pl(Bi)Sl(Bi)={ai−l,…,ai+l−1}={ai+m−l,…,ai+m+l−1}={ai−l,…,ai+l}∖{ai}={ai+m−l,…,ai+m+l}∖{ai+m}
(下标 mod2m)
于是
Sm−1−l(Ai)=⟹Sm−1−l(Bi)=Pl(Ai+1)=⟹ {ai+l+1,…,ai−l−1} Sm−1−l(Ai)∩Pl(Bi)=∅ {ai+l+1,…,ai−l−1}∖{ai+m} {ai−l+1,…,ai+l} Sm−1−l(Bi)∩Pl(Ai+1)=∅
(下标 mod2m)
□
奇数情况
构造
设 n=2m+1,记所有顶点为 {o}∪{ai},i=0,1,…,2m−1,有构造
i=0#m−1(j=1#m(ai−j,ai+j−1))#(ai,o)#(j=1#m−1(ai−j,ai+j))#(ai+m,o)
(下标 mod2m)
满足 g=m−1=⌈2n⌉−2。
证明
仍然记 Ai=j=1#m(ai−j,ai+j−1),Bi=j=1#m−1(ai−j,ai+j)。
由上可知相邻 A,B 的长度和为 m−1 的前后缀的点不重复,由于奇数构造中相邻的 A,B 有一个间隔 (ax,o),所以 A,B 内的比赛在 m 场内没有重复的点。
于是只需证在中间插入的 (ax,o) 不会带来 m 场内的重复点,即只需证
aiai+m∈/Sm−1−l(Ai)∪Pl(Bi)∈/Sm−1−l(Bi)∪Pl(Ai+1)
而由上
Sm−1−l(Ai)∪Pl(Bi)Sm−1−l(Bi)∪Pl(Ai+1)={ai+l+1,…,ai−l−1}∪{ai−l,…,ai+l}∖{ai}∋ai={ai+l+1,…,ai−l−1}∖{ai+m}∪{ai−l+1,…,ai+l}∋ai+m
□
结论
根据以上构造,g 能取到上界,即在 n≥3 时,有
g=⌈2n⌉−2