Codeforces Round #745 比赛记录(vp)
Codeforces Round #745 比赛记录(vp)
赛时:ABC
赛后:ABCD
题解
会的都会
总结
A题,数排列!恐怖,吓到了我一下。我在冷静观察样例之后发现答案仿佛是n!/2,仔细一想确实,好像有对称性。我模糊的感受到了它的对!再结合是div2的A题,比较简单,交一发,过了!
要自信,不能被题目吓到,冷静思考
对于快节奏的比赛,可以在感受到正确性之后啪的交一发,简单题还行,复杂问题要慎重
B题,我上来就看出来,是个大讨论。第一发少讨论了一个情况,改一下过了。
一定要注意 小数据!!!1
C题我上来就会了,因为我玩过 “某游戏”,因此没怎么看题面就懂了,然后我就枚举传送门的左上角,看看 \(5\times 4\) 的位置,要改多少下。然后 WA on 18
我仔细的看了一下题,发现 \(a\ge 5,b\ge 4\),不一定恰好是 \(5\) 和 \(4\)。某游戏中确实也是这个设定。
那咋整,我只会 \(n^4\)!没事,冷静,看看 \(n^4\) 怎么优化。一般优化的套路就是,我枚举其中的三个,第 \(4\) 个用数据结构优化。仔细一想,我枚举上下边界之后,相当于一个 \(f(a)+g(b)\ (a<b)\) 的最大值。用一个叫做 “前缀max” 的数据结构,就可以优化了!看来这是个数据结构题 (雾)。把这个数据结构打出来,我们就A了!\(n^3\) 的。
D题我推了一波,我发现一个位置左右不同的max数,就是它在笛卡尔树(大根)上的点深度。然后对着笛卡尔树dp就行了!套路地,\(f(n,m,k)\) 表示 \(n\) 个点,第 \(m\) 层有 \(k\) 个点,方案数。
然后枚举左子树大小,枚举左边第 \(m-1\) 层多少个,转移。复杂度是 \(O(n^5)\)。
鉴于CF机飞快,这个东西上界多,常数小,我大胆猜测它能过! —— 然而WA了。
我后来就一直在看它为啥WA,死活看不出来。后来和标算相比较,发现我有一个地方应该从 \(0\) 开始,我写成 \(1\) 开始。
那是在转移的时候,枚举左边的 \(m-1\) 层有 \(k'(k'<k)\) 个。
此时,我们应该想想我们是哪个情况没考虑到
但我考场上就是在想,死活没想出来,那咋办?
我考场上已经分析出来,当 \(k\) 小的时候,这个代码没问题,\(k\) 一旦大起来就⑧行了。
那就应该多看看关于 \(k\) 的部分啊啊啊
那我为什么没去看看 \(k\) 的部分,因为当时时间紧张,快结束了,我就整篇代码漫无目的的看,希望运气爆棚能够让我看到一个bug。
事实上,改掉了这个问题以后,还是无法通过:TLE on 12。我赛场上猜它能过,实际上不太能。
一种可行的做法是:
if (k>45) {puts("0"); return;}
可以通过打表发现,也可以毛估估,总之,能过!
这就是这题垃圾的地方,复杂度不确定,就靠瞎搞;搞过去很开心,搞不过去不开心,但是并没有意义