2021-11-10NOIP模拟赛总结
1.时间安排
审题:7:50—8:23
T1像是线段树,T2应该是kmp,T3是个DP,T4可能是基环树类型的树上问题
T1:8:23—10:23
又写炸了…一个小时都在写线段树,结果处理全局修改的时候发现改不了,不然找不到了,后来一想修改是全局操作可以用一个桶,就把线段树删了想着拿暴力set做,码完了但是样例一个没过,insert前find错了,想看看每次取交取并前后元素差异结果set查询元素不会,就订不出来了…
应
该
好
好
读
题
,
心
态
炸
没
了
\color{white}{应该好好读题,心态炸没了}
应该好好读题,心态炸没了
T2:10:23—10:56
kmp只是一开始的思考方向具体细节其实都不知道怎么写,但是样例非常优秀的把kmp匹配不了的情况列了出来,我就发现n>1和n=1的情况要分类讨论;n=1直接找next[m]就行了,如果算出的长度为0就输出-1;n>1时保底长度为(n-1)*m,然后向外扩展,对两个字符串的首尾匹配长度进行比较,我是从最长匹配向内缩小,从最长匹配长度比较到首尾匹配长度相同时判断尾部减去匹配长度的最后一位是否与s[m]相同,同理,对首部进行判断,如果两个条件全部满足,退出循环,ans即为(n-1)*m+匹配长度;
终
于
A
C
啦
!
!
!
\color{white}{终于AC啦!!!}
终于AC啦!!!
T3:10:56—11:30
一道DP题,像是背包(?),但是容积和背包数量也是DP要求的,同时求两个DP问题没有什么思路,但是有一个显然的贪心,最大的a是人数最多的队伍在所有情况中人数最少的底线,那么就以把a补满为标准,把所有人按从大到小排序(为满足队伍最多则每队人数都尽量小),然后放到a的队伍里,放满了就换成没有分队的人中a最大的人为队头,继续补满,直到所有人都分完;这时可能有最后一队没分够的情况,有两种解决办法,把队内元素从大到小依次弹出,直到队伍里最大的a等于小于队内人数,这时把已弹出的人从第一队到最后一队依次放(也可以/=队伍数量),最后输出队伍数量和第一队人数即可
谁
能
想
到
队
列
会
炸
内
存
T
A
T
\color{white}{谁能想到队列会炸内存TAT}
谁能想到队列会炸内存TAT
T4…
一道看了没写的题,如果是链或者菊花图,答案就是直径和一如果是树且不是自环,答案是去掉环后最大深度,但是这样就需要一次处理所有答案,不会处理,就此跳过
我
的
暴
力
分
啊
Q
A
Q
\color{white}{我的暴力分啊QAQ}
我的暴力分啊QAQ
2.总结
- T1时间戳的妙用确实学到了,没有想到说明这种思路值得学习,还有负数下标的处理简洁且方便,数据结构还是能不上就不上
- kmp的理解不深的话可能想不到正反求两次kmp,但是能想到的话就很简单了,注意一下kmp没有匹配成功的情况(-1||(n-1)*m)以及长度和kmp全部匹配成功时m位与m-lt[now]的比较,其实多试几个样例就能发现了,样例yyds!
- 贪心优化DP,似乎有人贪过了…但是DP还是要写的(贪心不会TT||),f[]和g[]的含义其实很好想,初值的设置也很显然,但是x+a[x+1]就值得思考一下,为什么?因为前x个已经全部组队成功,第x+1个只能加入前队或者另组新队,根据f[]和g[]的含义就能很清晰的写出DP转移式(x+a[x+1] or i-1->i)
- 实在是个大码量,感觉就算写特判也难写,先求最长次长次次长路径,然后换根DP求以每个点为根的该点最大次大次次大深度,还有lca,求直径,以及跑环回答询问的处理,都是难点,T4不愧为T4
3.对比
- T1十分,低于平均分,而且低很多…
- T2AC了,而且用时半小时,但是AC的人不少,也算优势
- T3数组开大挂掉80,没有试样例,不应该
- 没写到,暴力20还有小数据都没拿到
~~ 暴力保底,才有本钱追梦~~