集训WITH福建总结1.0

Written by:luoyin

5.21下午见到福建的同学,然后开始集训一直到现在,差不多有10天了。这十天,很累,很吃力,但也有很多收获。

 

 

5.22上午直接来了一场考试,考得贼差……

第一题纯数学,过。第二题,我觉得我的方法可能是最好的,是算相对高度差,但是把一个n打成了m,导致丢了40分。然后第六题打了一个暴力,另外三题,考试的时候都没有做(在研究6的优化),所以考试也要有点策略,这次出题有一题只有一个输出项,如果直接输出“Impossible”可以拿45分/滑稽,所以如果题目还是只有一个输出项的话,这样骗分也是不错的选择,云那一题,我想到可能云覆盖太多,导致没有人收到晴天,就直接放弃了,最后其实全部输出0就能拿36分。好吧,老师说以后题目不会只有一个输出项让我们有机可乘了,哎,骗分机会也没了,那拿不到全分的题就只能靠暴力拿部分分了。

 

 

5.22~5.26晚上,飞神(%%%)给我们讲了KMP(看*片)算法,manacher(马拉车)算法,trie树以及自动acpoiac自动机,但是飞神一开始很紧张,所以有点镇不住场。最后的ac自动机我听得有点云里雾里的

Kmp通常是用来判断两个字符串有没有母子关系的,对ab两个串各来一个奇奇怪怪的指针ij,表示a[i-j+1…i]==b[1…j]。也就是说i是不断增加的,随着i的增加j也会相应地变化,且j满足以a[i]结尾的长度为j的字符串正好匹配b串的前j个字符,如果a[i+1]==b[j+1]ij就各加一,一直到j==m时,就可以说ba的字串。还会有一个p数组,表示当第j项可以匹配。而第j+1项不能时,j应变为何值(这个值当然越大越好,且能继续匹配)

马拉车就是用来找一个字符串中的最长回文子串的,时间复杂度为On),因为回文串长度奇偶不确定,所以会先预处理,就是在字符串头尾每两个字符之间加一个‘#’,这样所有回文串的长度都是奇数了,设一个数组p[],其中p[i]表示字符串t在以t为中心的最长回文串的半径,不难发现,最长回文串的长度就是2*max(p[i])+1,但是我们预处理过这个串串,所以,原回文串的半径就应该是max(p[i])-1(好吧U盘里面有笔记的,看那里就行)

Ac自动机的核心就是一个神奇的fail指针,若fail[i]==j,就说明根到j的路径组成的串是根到i的路径组成串的最长后缀。那么就一定是要先构造fail指针啦,在trie树上作bfs,比如我们现在要为一个新节点决定fail指针。如果这个节点上的字母为c,我们就要沿着他父亲节点的fail指针走,直到走到一个节点,这个节点的儿子中也有字母为c的节点,然后把当前节点的fail指针指向那个字母也为c的儿子节点,如果一直走到root都没有找到满足要求的点,辣么就将该节点的fail指向root并将其加入一个奇怪的队列,然后继续bfs他的孩子

 

 

对应几天的早上,黄志刚老师给我们讲了初等数论,还好经过余老师大半年的熏陶,我才得以大致听懂那些非(qi)常(qi)有(guai)用(guai)的数论知识,印象最深的是同余式,毕竟以前跟着余老师学的时候,一直把同余式的意义搞错了,导致那么多题目我没听懂。

数论有一块是找素数和合数,有欧拉筛法和埃式筛法

还有一些定理:

唯一分解定理:每个正整数都可以唯一地表示为素数的乘积(素数可以有一个或多个)

欧拉定理:

费马小定理(欧拉定理的特例):
威尔逊定理:p为素数,则

 

 

5.25一天,我们去了上海,参观了上交大和纽大,感觉交大没有很好看,纽大就一栋楼,但是很精(shao)致(qian),很全(she)面(chi)。

 

 

然后就是虚神在5.26给我们讲了壮鸭,虚神讲得还是蛮清楚的,但是感觉位运算还得好好琢磨,壮鸭的一些博客也要看看,毕竟对我来说是一种全新的思想。

壮鸭就是用01串(一个整数)表示一个集合,一堆状态(线性的),从而达到压缩状态的目的

所以就涉及到很多位运算的套路了,感觉有的位运算好神奇,几个奇奇怪怪的符号就拼出了核心代码

 

 

接下来就是老刘讲数据结构,讲了什么我也不知道,先讲了树的dfs遍历、lca(倍增,RMQ),树上差分(用于修改区间,查询单点),(某天下午开小灶讲了并查集)然后就是树状数组,线段树and左偏树。

Dfs遍历和lca已经打过笔记了,就不打了,直接码后面的

树状数组修改和查询的时间复杂度都是Olog2n),设一个一维数组a[]表示原来的那些数字,再设c[i]=sum(a[j]),其中i-lowbit(i)+1<=j<=i,所以有一些奇奇怪怪的结论,节点i的父亲节点为i+lowbit(i),节点i的最近不相交前驱为i-lowbit(i),如果要改变a[i],就要改c[i],c[i+lowbit(i)],c(i+lowbit(i)+lowbit(i+lowbit(i))),等等,一直到上限为止。若要查询sum(a[1…i]),则需要累加c中的元素,c[i],c[i-lowbit(i)].一直减到为零(大于零)。所以树状数组能支持的操作是修改点值,查询区间和。

线段树是一种二叉搜索树,它将一个区间划分成一些单元区间(每次衍生的时候都要对半劈),每个单元区间对应线段树中的一个结点。线段树的建立和修改都是递归实现的(从根开始,往下递归,当然,如果目标点不在某个区间,直接返回就行),但鉴于On)的时间复杂度并不能让线段树成为一种优秀的数据结构,我们就引进了一种lazy思想。对于一个需要执行的操作并不需要一次性修改完,而是在分解的区间上打上一个标记,记录一下需要执行的操作,然后在下一次操作碰到这个区间的时候下传标记并执行操作。

左偏树就是一棵长得不平衡的向左偏的二叉树,它满足堆的性质,支持基本的插入,查询,删除操作,还支持在对数级的时间内完成——合并。在键值这个属性上,左偏树满足堆性质,在距离这个属性上,左偏树满足左偏性质。

另外左偏树还有一些性质就不多说了,专门的笔记里都有的

 

 

然后嘛5.29上午打了一个ACM欢乐赛,然鹅我们组仨人就拿了仨气球,吼吼吼,而且排名不(dao)堪(shu)入(di)目(er),真的是菜爆了,第一题因为一开始翻译错误导致一直罚时,后来仔细看了两个minimizemaximize才翻译对,才得以A掉,而且网站一种卡,无法提交,A掉的时候时间已经过了一个多小时了。第二题其实一开始直接给我应该会快点,刚拿到题目一脸懵逼,完全不知道什么情况算无法通关,后来试着将炸弹数和提示数是否匹配作为判断的标准,但还是过不了样例,把getchar改成了cin,奇迹般的第一个样例就过了,然后就直接A掉了,时间差不多一个半小时。第三题一直卡4,后来wy改了才过,两个半小时。后面陈祥一直在奋斗E,但还是没有A掉,有点可惜。中午二神请我们吃了kfc外卖。

 

 

感觉我的理解力还是不太好,老师上课讲的接受的大概70%,但感觉听懂了的算法还是敲不出完整的代码,所以还是要勤加整理,代码多敲几次,找点感觉,明天又有考试了,祝自己好运吧

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

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值