【批传】7.10-7.14

来源:互联网 发布:mac版cdr 编辑:程序博客网 时间:2024/06/15 11:56

7.10

(蛤,幸好还是rank1)今天上午是考试,考试主要内容二三题纯搞平衡树,但是没人AC,甚至都没人超过50%。先说第一题吧,纯签到题,可以发现每次选的区间必定为奇数格子,在Aka涂黑后必定涂黑奇数格子,在Hib涂黑后必定黑了偶数格子,%2判断即可,压行两行搞定,水过。第二题纯暴力过20%,我伪DP暴力(f[i][0/1])过了30%,用可以拆开反转的treap搞掉。第三题是没有区间相减性的,所以不可以主席树。而我又建线段树耍莫队(莫队真的好东西)过了50%(多一个log)。事实上可以分块大法来做,连续块有直接答案,向块外扩张不到sqrt次得出答案,卡过。

下午又讲高端内容:这个这个树链の剖分(常用重链の剖分),可以兹磁更多树上的操作啦。无论你是路径改,单点改,路径max,路径sum,它都可以轻松解决。具体:在树链上反复横跳跳出答案。我调了半天,但是调调就累了………………唉…………


7.11

今天上午学的是字符串类型,首先讲的是哈希。哈希把一种前缀字符串转变成了一个n进制数并对某一大数取模,并且可以前缀求差来求得区间哈希值。通过判断区间哈希值可以直接判断是否相等。如果要匹配回文,那么就要求正反哈希,同时正反区间哈希值得到以后比较即可判断是否是不同正反的相同串。为了防止被卡,可以双哈希取不同的base进制值来获得不同哈希值,比较时双比较均同才认同,不过时间翻番。哈希值可以有效优化关于字串的问题。然后又是KMP和AC自动机,这个东西就算是复习了一遍吧,主要思想还是每次失配后找最长公共前后缀重配,AC自动机就是trie树上重配,每次失配后有一个fail指针指着下一次从哪里开始配,然后不断搞就是了。下午还是把AC自动机又写了一边,还看了看自动AC机[X]。


7.12

今天上午考试。第二题竟是签到题?带通配符的匹配,不能用KMP而需要用bitset,查每种字符以某位开头(需要左移)是符合的就是1,每次与ANS进行&即可找出可以的位置。第一题纯的构建fail指针(甚至不需要AC自动机匹配),但是使用trie图更加优化。第三题先差分,原串*2保证可以按环的形式来操作(限制匹配头不超过原串尾),然后就是裸的KMP。至于第三题为什么暴力和KMP都得90分,这就体现不出差距了。

下午讲的是SA后缀数组,可以用来判断相同字串。首先通过倍增桶排序求出后缀数组,然后求出height数组,用于后期方便解题。接下来就是一些后缀数组的应用,它求后缀的前缀可以快速求出字串的LCP,也可以求本质不同的子串个数。通过相接两个字串然后SA,可以找他们的最长公共字串


7.13

今天就一直是自行练习,有什么好写的呢?上午我先调了一下SA的模板,主要是把它的实现方式再复习了一边,以便明天考试能快速写出。然后我把字符和字符串的读入研究了一下,把%[]和getchar等东西大致进行了了解,这样对字符串类型题很有帮助。中午略略对字符读入输出做了一些自我练习。下午就是纯粹调题了,我先把bitset思想复习了一下,然后就又看了看数据结构的内容,写了几个线段树模板(不同类型比如数组结构体和函数代入),在此基础上还伪代码写了点点可持久化之类的。后来我开始用SA做题,每次都手打一边SA然后进行了一些修改,去过ST training上面的题。测了几遍发现数组应该开的很大,于是又把一些程序的漏洞补上了,最后一共过了2道ST的题,其中一道用哈希也可以做出来。


7.14

今天就只是上午考试。(因此可以只写150字?)首先说说第一题棋盘,这个可以发现每一种棋子摆完以后摆的位置没有影响,只是剩余的行列数有影响,于是可以搞一个类似的DP不至于太暴力……第二题是水题一个,一旦理解了怎么删除的就可以了。因为题目描述是扫尾部扫到有串删最长的,所以方法就是首先改为搜头,然后搜到第一个匹配的尾(有END标记)就删。第三题好玩的交互题!用并查集即可。对于每两个集合(设为m,n),为了让对方知道他们连通的询问次数尽可能多,只连他们间的最后一条边。即已经确定没有的边noedge[m][n] == num[m] * num[n]-1的时候就连边。因为对方绝顶聪明,如果他提前知道某些集合连通,他就不会问集合中的边了,你就输了。所以这样保证他必须问完。(然而就这样洋洋洒洒写了300?)


补图 rank1!!(7月10日)