Codeforces Round #743 比赛记录(vp)
赛时:ABCD
赛后:ABCDE
题解
A,B俩沙比题
C: 考虑使用拓扑排序计算每个章节是哪一轮被理解的。对于一个依赖关系 \(u\to v\) (表示 \(v\) 依赖 \(v\)),设 \(u\) 在第 \(t\) 轮被理解。如果 \(u<v\),那么 \(v\) 被理解的轮数至少为 \(t\)。但如果 \(u>v\),那 \(v\) 被理解的轮数就至少是 \(t+1\) 了,因为它是再也没可能在同一轮中被理解了。
因此,设 \(t_i\) 表示 \(i\) 被理解的轮数。有:
这样,拓扑排序随便做。
D:首先,注意到:\(n\) 位置的值,只可能是后缀奇数若干个东西的异或。我们看看长度为奇数的后缀里,有没有异或和为 \(0\) 的。如果没有,就gg。
否则,设 \(p\) 满足 \(n-p+1\) 为奇数,且 \([p,n]\) 异或和为 \(0\)。首先,我们让 \([p,n]\) 区间都变成 \(0\)。发现,每个两个操作一下,就能让 \(n\) 位置为 \(0\),且前面连续相邻的两个,都是一样的。
即,.... aa bb cc ... xx 0
的形式。aa
表示相邻两个一样的数,bb,cc
同理。然后这边我们可以用 \(\dfrac{n-p}{2}\) 步,让它们都变成 \(0\)。
对于前面,我们可以先用一步把两个变成一样,然后再做一步,把两个一样的变成 \(0\)。这样,两步做两个,总体上是对的。
但是最后可能剩下 \(1,2\) 位置不太对,要判一下。
E:显然可以 \(n^3\) 区间dp。
脑子一转,一定有那么一个最优解的颜色是取在区间两端的。左/右均可。为啥呢?假设它没取到端点,那端点的颜色肯定被动过。我们把动它的那次,去掉。然后最后一步的时候,可能除了这个端点之外,还有一大块,我们把省下的这个操作,去做那个大块。然后区间颜色还是一样,操作次数一样,而颜色就变成了端点的颜色。
处理掉端点处一长段连续相同的情况。然后,\(f(l,r)=\max\{f(l,k)+f(k+1,r),\ k\in[l,r)\}\)。
再注意到,这个 \(k\) 的颜色一定和 \(r\) 一样,做完了。或者说,和 \(r\) 一样,一定能取到最优解。
为啥呢?假设 \(k,r\) 一样。由于我们处理掉了一长段连续相同,那只需要考虑中间那些不一样的情况。中间那些不同的地方,怎么也得先做掉,才能再连上 \(k,r\)。因此,\(k,r\) 一定会先处在一个断开的状态。我们直接用这两个dp拼起来的方法做,就是这种方案的答案了。
因此,我们记一下pre,k不断跳pre转移。由于相同颜色数只有20种,复杂度是 \(O(20\times n^2)\),就能过了。
实况&总结
最近不知道得了什么病,打代码的手感下降了,感觉键盘不是我自己的一样。
3min秒了A,但是B开始就出锅了。B的锅小,修了10min修好了,稍微有些紧张,还交错题交到A上去了qaq
为什么做不到打完码就能A呢?
做C题的时候家里来了个查煤气表的,并没有太大影响,我是拿着草稿本出去接待他的(
然后我就想到了一个拓扑排序。打完,啪的一下,挂了!WA on 2
暴露一个问题,我拓扑排序打的不熟练,且会打出锅
此时我就开始慌了,就在猜哪边出了问题。都没猜对,贡献3发WA。
以后先把所有问题都看一遍,减少不必要的WA
慌忙之下开了D。然后我发现这玩意我也会!打完之后,啪的一下,也挂了!WA on 2。
我超!同时挂两个!真就练心态了呗
那咋整啊。我现在会四个题,但同时有两个大锅!我也不能干啥,总不见得开E吧,再来一个锅?于是我选择了对拍
2h比赛对拍,真有你的!
极 限 运 动
存疑:如何增加对拍的速度呢?
然后我拍了1h把C搞定了。那个数据生成器,稍作改动,啪的一下D也拍好了。
此时还剩10min。原本想睡大觉的,一想,我还是继续做吧!然后就去开E
精神可嘉!但是,你会吗?
很好,不会。显然一个 \(n^3\) 的dp是会的,然后我开始猜转移点。
大方向对了!结论?
我看出来一个性质,最优解一定存在一种,是取在区间的端点上的。
接下来,我猜这个转移点距离l,r不超过20。没有得到证明,我纯猜,然后猜错了。再加上我实现的不精细,我当时是TLE的。
多组数据千万不要memset!都给我for循环!
赛后继续去看了题解,完成了E题。