CSPS模拟测试59

Posted hzoi-cbx

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了CSPS模拟测试59相关的知识,希望对你有一定的参考价值。

这场考得我心态爆炸。。。。。。。。。

开场T1只会$n^2$,然后发现bfs时每个点只需要被更新一次,其他的更新都是没用的。

也就是说,我们可以只更新还没被更新的点?

于是我先YY了一个链表,发现在链表中删除一个数之后,用它更新其他点的时候,就没有办法找到它的前趋后继了,用之前的可以被卡成$O(n^2)$,大样例都跑了2s+,然后就死了。

然后才想到set,可以保证每个点只被更新一次,然而发现我对set一无所知,一直以为begin指向为空,而end指向最大元素,调了好久,后来发现是反的。。。。

然后处理的时候又出了问题,仍然没有保证每个点只被更新一次,此时大约过去了2h,心态还是很崩的。

然后把奇偶分开,发现还是不行,最后终于发现每个点的左右边界定的过大了。

于是,在开考2.5h后,我终于自认为A掉了T1。

赶紧去打了T2暴力,突然想到回去给T1打个对拍,发现某些数据跑的还是很慢!(虽然从赛后看此时已经A了)

优化了一下,稳定在了0.1s,此时还剩5min,去打了个T3的8pts就没了。

T1

  上面说过了。

T2.

  首先一个非常显然但我没有看出来的结论:顺序不影响结果(因为不管怎么排序,任意横纵两排都会有一个交点)

  然后我们将所有值从大到小排序,可以发现,在比它大的数填完之后,每个值能够填的区域是一个L形(矩形也算L)

  只有L中间的矩形需要保证合法,因为其他地方的合法性已经在之前保证了,当前值也无法满足那些位置。

  也就是说,我们当前只需要保证矩形所在的行和列合法。

  令矩形为$a*b$,上面的部分长为c,下面长为d

  直接计算不容易,我们考虑容斥

  将L拆成两个小矩形,那么在保证所有列合法的情况下,令$f[i]$表示至少有i列不合法的情况。

  容斥系数:$ans=\sum\limits_i=0^a(-1)^if_i$

  我们考虑如何计算f[i]

  $f[i]=C_a^i*(s^i*((s+1)^a+c-i-s^a+c-i))^b*(s^i*(s+1)^a-i)^d$

  用这个式子暴力算就行了,应该挺好理解的

以上是关于CSPS模拟测试59的主要内容,如果未能解决你的问题,请参考以下文章

csps模拟测试57

csps模拟测试60

csps模拟测试58

csps模拟测试72

csps模拟测试50反思

csps-s模拟测试60嘟嘟噜,天才绅士少女助手克里斯蒂娜,凤凰院凶真题解