比赛时间安排
7.20-7.30
t1 直接上找环不就ok了吗?
t2 感觉好复杂,字符串的问题,没什么想法
t3 把k个点向这个区间里其他点连边,然后tarjan判环,然后再拓扑一下求解?
7.30-8.10
t1 先写了70分,发现样例都跑不过去,发现找环是不对的,因为要求是简单环,如果在一个复杂的环上是不能算的,于是搞了基环树的找环,应该能对吧,反正把样例几个都过了
8.10-8.50
t3 在连边的时候发现是向一个区间里的一些连边,能线段树优化建图?但是不是直接向整个区间连边,那还是没办法搞,或者说也可以只是我没写过这种题?不知道,先写暴力吧,在判环的时候突然想到,反正我之后还要拓扑,那为啥不直接用拓扑判环?于是就把tarjan删了,上拓扑,样例过了,虽然是spj,但是我的输出竟然和大样例的一模一样,惊了,肯定过了
8.50-10.15
然后看没有头绪的t2,感觉可以搞个贪心的想法,我肯定尽量用一个字符能前连出其他的很多,类似于前缀或者后缀的东西,应该是最优的吧,然后就顺着思路想,但是越想越复杂,情况多到没法判
10.15-11.35
想到t2暴力是不是可以枚举断点,一个字符串肯定是连续的,于是写了dfs,时限刚好卡上吧,但是还有情况就是字符的顺序,可能换一下顺序结果就更优?于是就又搞了一个全排列,但是这样就超时了,不过跑了2分钟,结果是对的,想优化未果。
是在不行了,只拿这一点分肯定没用,于是冒险一点想,是不是每次只选一个串重复出现是最优的,于是就这样写了,加上分类讨论一些情况,样例过了,自己搞了几组数据,把bug调了一下,也过了
赛后总结反思
- t2的暴力思路不清晰,写的时间太长了
- 有点不会变通,t3建边就分段建呗,总比一个一个建边快
- t1写挂了10分,原因是,本来想用一个巧方法,可能能稍微优化一下,(怕环的个数太多)但是这个方法错了,可能是有些地方没考虑好,看来还是要写自己熟悉的方法
与正解的差距
T1
写个点双,然后判断是否合法,也就是dcc里面的点数和边数是否相等
T2
首先是基于AC自动机的dp转移,其实挺简单的,毕竟已经想到是和前缀之类有关的东西了,这个敏感度还要再升一下。优化用的是广义矩阵,感觉对矩阵乘法的思想更进一步了,这个辅助矩阵其实就是看哪一位对哪一位有贡献,第一维是转移矩阵,第二维是转移到的值,然后建立出来快速幂就行了,另外,在赋值的时候要想清楚。
T3
就差建边方法没想到,佛了,见一个记一个先,这种变通还是得会的(难道太久没思考了?)