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\) 被理解的轮数。有:

\[t_u= \begin{cases} t_p & (p<u) \\ t_p+1 (p>u) \end{cases} \]

这样,拓扑排序随便做。

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题。

posted @ 2021-10-18 19:55  Flandre-Zhu  阅读(54)  评论(0编辑  收藏  举报