0814集训模拟总结(七夕特辑)

0814字符串相关

复盘

今天到学校的时候发生了一点小插曲,服务器莫名其妙关了也没网了,所以只好看看书复习复习字符串相关算法(没错!我又知道今天要考什么啦!)
虽然出了问题但并不影响我们正常考试
考试开始,还是老策略,上来直接通读全文,大概确定了题目类型以及战略方向,T1哈希T2KMPT3trie树T4哈希,难度确实大概是递增的
好!抓住T1就上!啊,前后缀问题,之前做过,大概就是hash解决吧但是不会hash怎么办,map应该更简单一点,大概思路就是枚举前缀和后缀,统计出现次数,大于等于2就可以,然后选出最优答案,由于总长度不超过500000,大概是切了吧(埋下伏笔)TIME:45min
T2!接着勇!首先看看这题!多明显!要求前后缀同时还要在中间出现,这不是KMP还能是什么?但是问题来了,怎么整前后缀。当时我想到的只有枚举了,但是分析一下枚举显然会T吧,但是确实想不到其他写法了,只能先写上这点暴力,期望得分50 TIME:1.5h
T3我这一看应该就是trie树吧
但是仔细看去,这trie树怎么上树呢,上树之后又怎么统计呢,统计了又怎么合并呢,这十万个为什么我想了一出又来一出,于是决定放弃trie树去想想别的解法
如果我不上树,而是改为建图的思路,然后在图上进行DFS暴力统计?但是好像太暴力了,绝对过不了的。但如果采用回溯的方式?好像只要遍历一遍整棵树就行,复杂度O(n+m)过肯定没问题,但是如何回溯呢?回溯时如何统计呢?
首先,我们直接向下进行DFS当进行到底时开始回溯,记录每个节点总共记录多少个字符串以及他们分别是什么
这里可以用map来记录,于是问题就基本迎刃而解了,期望得分100(埋下伏笔)TIME:3.5h
T4大概就是先展开成环,再换上找一个长为L的区间,使在左边的左括号尽量多就行,但是没时间了,所以匆忙打了个暴力就打包交上去了

赛后

期望:100+50+100+0=250
实际:50+50+70+0=170
虽然还是没达到预期值,但是并没有太出乎意料,简单看看吧
首先T1,实际上这个是切不了的,正解是trie树正着存找一遍再倒着存找一遍,挂掉50
T3实际上并不是O(n+m)而是O(n2)因为得计算转移时间,实际上,我离正解只差了一个启发式合并,这里在我的思路的基础上,将重儿子的id强行给予父亲节点,用重儿子直接更新要更优,这里相当于省去了加入最大儿子的权值,那么时间复杂度就可以减去重儿子,这样期望的时间复杂度可以达到O(logn)

小的阶段总结

这段时间比赛状况可以说是逐渐改善,不只是答题的策略还是思路,其中的重要体现就是blog中加粗变红的逐渐减少了,最大的收益就是逐渐建立起了更强的自信,接下来的训练要继续努力啊!

彩蛋

#include<bits/stdc++.h>
using namespace std;
int main(){
    
    
	printf("%c",'0'-43);
    return 0;
}

猜你喜欢

转载自blog.csdn.net/MuLaSaMe/article/details/119705595