比赛时间安排
7.20-7.35 t1 暴力20可写 t2 n=1,如果不输出方案的话能用sam求,但是输出方案难道要用sa吗?可是我不会 t3 这个感觉好简单,如果是随机数据,那不是肯定能过?
7.35-8.07 t1 暴力写完,刚开始写的是2^nnn的,但是发现炸了,于是就加了一点优化,就能跑过了
8.07-8.30 凭着记忆以及做ppt的过程把sam板子写出来了,下应该就会更熟练了
8.30-9.10 写t3的暴力n<=4的情况 我发现好像没我想的那么简单,太复杂了 好像还需要n=1,n=2,n=3,n=4分类讨论 o不 把n=2写完感觉太复杂了,不想写了,放弃了
9.10-9.45 发现t1是可以dp的,而且非常好写,另外造数据的时候惊奇地发现n^2能过30000的数据斯
9.45-10.00 t1的t=t的情况,刚开始想的是单调队列优化,然后在那使劲想,最后发现一个前缀max就行了噗
10.00-10.20 思考t1更普遍的做法,其实就是多了一个限制,那就是我在转移的时候,i会确定一个范围,j同样会确定一个范围,前缀貌似是没有正确性的,想想用线段树维护貌似也不可取,因为每个点自己的范围是不确定的,你用线段树维护还得精确到每个点,区间操作就没有意义了(或许真的是但是我比较憨没想到)
10.20-11.45 看了看t2也没什么想法,那就。。 写t3吧呜呜呜 就开始大力分类讨论。 枚举可能出现的名字长度的每一种情况去算 然后就写了260行。。。 当然还要算上第二档的骗分,其实更保险的应该是2,3都搞一下,但是没时间了,我直接输出的2,然后暴力去找,我觉得随机的肯定能找到哈哈哈 然后我比赛完才知道把子序列看成子串了!o不
与正解的差距
T1
其实正解的做法感觉和我在想单调队列的时候非常想!(我怎么就没想到呢呜呜呜) 把将会在i位置起作用的j提前存起来,到i位置之后再添加到树状数组里,就ok了
T2
吐槽一下,oj上为啥c++,和c++11的编译时间不一样啊哭了 首先输出方案其实很简单,只要跑一遍sam建出来的树就行了,还是对sam的结构功能不太了解吧(自闭,20分白丢了) 正解是对每个串建一个sam,然后拼起来,如果当前这个没出边,就找后面第一个有出边的点,其实还挺形象的(挠头),然后就是正常的dfs输出方案,计算方案数的时候,因为拼起来的sam失去了原有sam的性质,所以要用拓扑求一遍从根出发的路径数,dp很好理解
感觉拼起来这个想法赛场上的时候想到了,但是想成那种用组合数计算了,显然不对,没有再往深处思考了,主要还是把时间用来写t3了
|