CF1965F Conference
这题真他妈牛逼。
考虑到连续的一段如何判定,比较蠢的办法是根据 Hall 定理,枚举每个子集,看 \(N(S)\) 的大小去判定是否有匹配。
我们猜一个更加高明的结论,用 Hall 定理判定一个区间的所有子串即可!
但是你会发现会被这组样例搞掉:
3
1 3
2 2
2 2
不合法的 \(S = \{1, 3\}\),这显然不是一个子串。
但是我们还能改,发现问题在哪里,可能中间一段区间特别多,我们就炸掉了。
假设我们可以通过转化,使得区间左端点都互不相同,这样的话,就可以套用上述判定过程了。
我们注意到,对于一个 \(l\),我们找到一组对 \((i, j)\),使得 \((i, j)\) 不被之前的左端点转化,\(i \le l\),且 \(j\) 是所有满足条件里最小的,那么,我们就可以将 \((i, j)\) 转化为 \((l, j)\),然后每个对的左端点就互不相同了,就可以套用上述判定了。
可以利用区间合法的单调性辅助做题,至于为什么这样的转化是可以的,个人感觉比较困难,更多的是靠直觉。

浙公网安备 33010602011771号