CSP2019游记

Day -不知道多少

第一轮

题出得挺好,终于没有鬼畜的CCF赞歌了

考得还行

Day -1

复习了Tarjan并伪证了一遍,然后颓废了

安利E17大失败

放了几十个满贯

给某同学科普了一些不好的东西,现在他好像自闭了 我谢罪

Day 0

继续肝Tarjan然后想自闭了

于是写了个左偏树,调自闭了

下午看了今年的博客 发现鸽子本性暴露无遗,跟去年完全没法比了……

看了几篇题解,越看越内疚,就关了

不敢写下去了

Day 1

(直接跳到发题)

密码认真思考……emm……

打开题,一股表达式树的气息扑面而来

T1啥玩意啊

T2啥玩意啊

T3啥玩意啊

……

仔细读题

T1好像是模拟

T2树上括号匹配子串个数?

T3……?

8:30开始写

把构造方法都告诉你了,模拟无误……

模鬼啊, 2 64 2^{64} 264

下意识地转成二进制发现是个SB题,切了

8:45

T2一眼DP

用回文树的思想乱搞一下……

然后越推越自闭

……先考虑链的情况

……发现没什么区别

然后冷静下来,重新推一波,推出了一个 O ( n 4 ) O(n^4) O(n4)的优秀DP做法

开始思考括号序列的性质

情况复杂是因为两个可以拼成一个

然后发现如果把一个不能拆分的合法子串称为一个"基本串",那么一个位置结尾最多有一个基本串。

证明:

反证法,设某个位置结尾有两个基本串,设为 S S S T T T,其中 ∣ S ∣ ≤ ∣ T ∣ |S|\leq |T| ST

由基本串定义, T T T的前 ∣ T ∣ − ∣ S ∣ |T|-|S| TS位一定不合法

考虑括号序列的求法:将每个字符入栈

因为 S S S合法,所以在栈中会消完,所以剩下的是 T T T的前 ∣ T ∣ − ∣ S ∣ |T|-|S| TS位,和 T T T合法矛盾。

然后用栈维护基本串在哪里,记录栈顶和栈大小,回溯的时候还原

写出来一发过小样例美滋滋

……然后WA了中样例

造一组小的测出来不对,调试发现栈顶写成了栈大小……

修改后过了中样例

测大样例

激 寒 营 业 不 可 避

什么垃圾样例啊

……然后爆栈了

……然后发现忘了扩栈命令

于是开虚拟机测过了

丢了不管了

9:40

T3一眼不可做

……暴力10分差评

想了个显然的贪心,然后显然挂了

思考了一下完全没思路,10:20

骗分吧

先写个 O ( n ! ) O(n!) O(n!)

链的情况好像可以直接贪心?

写一波发现很精神污染

11:00

大脑一片混乱,于是上了个厕所(雾)

回来马上发现可以分治(大雾)

写出来不停WA,被排列过去映射过来搞晕了

把条理理清之后过了自己写的样例

……再测一组WA了

心态崩了,不写了

11:30

开虚拟机编译通过

……然后想起了扩栈命令

水过剩下30min

预计100+100+10=210

出来发现全世界都210

Day 2

由于写这篇游记时隔太久,所以忘了很多细节

打开题面,一股硬核的气息铺面而来。

T1阅读题 读了半天读懂了

T2显然不是DP就是神仙贪心

草样例三爆ull了啊

T3断一条边求所有重心标号和

感觉很可做,但就是不会做

这时

对于 t y p e = 0 type=0 type=0的所有测试点,保证最后输出的答案 ≤ 4 × 1 0 18 \leq4×10^{18} 4×1018

你真棒

怎么比昨天还难啊……看来错怪D1T3出题人了

开始肝T1

……相当于每行最多选1个,每列不能过半,贡献为选的所有数的积,求总贡献

显然DP

数次读错题,一直在想怎么把所有列的信息压缩,怎么都退不出来

到9:30

……10点钟想不出来就打暴力吧

脑子一闪,注意到“不能过半”,这个性质一直没用

会不会有什么特殊性质?

不能过半什么意思?就是比其他加起来都多

也就是最多只有一列过半!

然后容斥就可以了!

f ( i , j ) f(i,j) f(i,j)表示当前在第 i i i行,最多的一列选了 j j j个的方案数

写了一半发现完全假了,要确定哪一列最多

f ( i , j , k ) f(i,j,k) f(i,j,k)表示当前在第 i i i行,第 j j j列选了 k k k个的方案数

写出来死活过不了样例

唉……?

好像某一行可以不选

可是不选的不统计入总数啊

于是极其硬核地设 f ( i , j , k , l ) f(i,j,k,l) f(i,j,k,l)表示当前在第 i i i行,第 j j j列选了 k k k个,一共选了 l l l行的方案数并推出了极其硬核的方程

i i i滚一下就可以了 复杂度 O ( n 3 m ) O(n^3m) O(n3m) 可能卡得过去?

然后写出来极其硬核的代码,还是过不了样例

10:00

上个厕所,回来一眼就发现下标输错了(弥天大雾)

然后顺利过了所有样例

然后造一组极限数据T了

重新算一下,过得了才有鬼了……

于是只有84分 感觉很近了,但就是想不出来

10:30 弃了

后面只能暴力了……

T2推了一下毫无进展,于是直接 O ( n 3 ) O(n^3) O(n3)dp艹36分走

T3直接暴力拿40,然后链似乎很好做 共计55

(实际上后面完美二叉树也水得要死)

预计84+36+55=175

那我上不了400啊……

粗略看了一下好像水不了多少分了

于是Linux编译测空间走人

–End–

公无渡河。
公竟渡河!
渡河而死;
其奈公何!

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值