JOI 2018 Final

发布时间 2023-07-28 21:15:08作者: Skylakes

T1:注意到 \(i,i+1\) 间的间隔如果选上会增加 \(a_{i+1}-a_i-1\) 的时间,然后消耗一根火柴。那不取最大的 \(k-1\) 个即可。(\(-1\) 是因为一开始用了一根。)

T2:按 \(A\) 排序,算 \(B\) 的前缀和 \(S\),选一个区间 \([l,r]\) 显然比不是区间更优,代价 \(S_r-A_r-(S_l-A_{l+1})\),一个变量记录前缀最小即可。\(\mathcal O(n\log n)\)。瓶颈在排序。

T3:显然的做法是两个团子有重叠就连边,肯定是二分图,跑二分图最大独立集即可。过不去。观察到其实没多少团子会有重叠,因为他限制给的比较强,就三种情况:

RGW    R      R
G     RGW     G
W      W    RGW

然后有一个博特的观察:\(\tt R,G,W\) 都在同一条斜线上。你挑一个出来枚举每条斜线跑线性 dp 就行。\(\mathcal O(nm)\)。具体实现我选择以 \(\tt R\) 为基点,\(f(i,0/1/2,0/1/2)\) 分别记录前面两个位置 不选/选横行/选竖行 的最大独立集大小。转移比较简单。

T4:一开始看这题没啥头绪,瞎猜了一个 \(S\rightsquigarrow T,U\rightsquigarrow V\) 的最短路至多有一段重叠。然后反证一下是对的,感觉牛大了,后来发现这题因为边权会变 \(0\) 所以比较显然。想了个 shaber 贪心写不动,看题解。考虑这种题目的经典做法:分层图。分 \(4\) 层,假设选了 \(P,Q\) 两个端点:\(1,4\) 层跑 \(U\rightsquigarrow P,Q\rightsquigarrow T\) 的最短路,中间两层要分别建好 \(S\rightsquigarrow T\) 最短路的正反图,边权都是 \(0\),表示走了这一段 \(0\) 边。\(\mathcal O((n+m)\log (n+m))\),会带一个 \(4\) 的常数,问题不大。

T5:太人类智慧了。很神奇吧,鸽笼原理!

上来没思路啊!这三个状态我咋压 FWT,肯定要容斥个什么锤子东西然后像 LNR2 D1T3 那样压成两个,这能写?看题解喽。

我们有三种暴力思路,假设 \(\tt 0,1,?\) 的个数是 \(a,b,c\)

  1. 枚举 \(\tt ?\) 的状态,直接加,最暴力的方法,单次 \(\mathcal O(2^c)\)
  2. \(\tt 0\) 容斥,先把 \(\tt 0\) 全换成 \(\tt ?\),再钦定 \(S\) 位置是 \(1\),容斥系数 \((-1)^{|S|}\),其余部分高维前缀和卷超集。\(\mathcal O(2^a)\)
  3. \(\tt 1\) 容斥,类似。\(\mathcal O(2^b)\)

然后最好玩的一步,取 \(a,b,c\) 最小的那个对应的方案,根据鸽笼原理 \(\min(a,b,c)\le \frac{n}{3}\),那么复杂度 \(\mathcal O(q2^{\frac{n}{3}}+2^nn)\)。这么牛!!!