连续几天的考试都没有总结,今天有些时间,总结一下这几场考试的情况。
10.28场
开场先读题,然后推了推T2,发现是水题。出于对期望的恐惧,没有选择研究T3,而是回头肝T1,想了很久,没有思路。打完T2,自己搓了一些数据,过了,回头打了T1的暴搜,再打了一个表,似乎部分分挺多的。再做T3,有点思路,但思路并不清晰,于是打了特殊数据就完了。
期望得分:70+100+20=190
最终得分:30+100+20=150
结果T1是DP,没看出来。唔...原题,地精部落,题果然还是做的太少了,有些人做过就赚了。波动序列,还行。打完表后,没有改数据分治的条件,还把打表时的条件留着的,后面几个点T飞,惨挂40分。
T2,不出意外,A了。
T3,血亏。实际上不难,只要想到算蚊子的存活的期望,最后再累计答案,即m*n减去存活的期望等于死亡的期望,就是一个裸的树形DP了。考试的时候想到需要存储存活率,也想到需要枚举lca做树形DP,但没有想到整个树形DP都只算存活期望,在最后再减去就是。我一直在思考如果一个蚊子之前就死了,那么在后面的点根本就没有贡献,感觉就不可统计,于是就GG了。遇到期望还是不能怂,还有就是正难则反,补集转化的思想一定要有。
10.29场
开场还是先读题,T1感觉是个排序+双指针,T2感觉很奇怪没思路,T3又是期望。一开始T3看错了,感觉是个简单题,一下就推出来了公式,感觉有问题,重新读题,才发现是1~k,2~k+1...,而我一开始读成了1~k, k+1~2*k...我还正纳闷k是否整除n呢。重新写了一个公式,$O(N^{3})$的,感觉没有必要,既然每个作业的权值是随机的,那每一天的期望相互之间应该没有影响,都是相等的,于是用之前读错题时写下的式子,改了一下天数,发现过了样例,看了一下n最为500,这时m为400,改了一下数组,就跑路了。回头肝T1,ltw和wys已经肝了1个多小时的T1了,我打了1个小时多,有点写不下去的感觉,就又做了T2,c没给数据范围打了30分的$O(N^{2}logN)$暴力。再写了写T1,考试就结束了。
期望得分:0+30+100=130
实际得分:0+0+65=65
T1果然不是什么思维难题,只是需要时间实现,细节很多,ltw本来可以考场AC的,结果数组开小了。我那天晚上改了一个晚上,第二天早上又改了10分钟才把T1改出来。我的解法是排序+二分,最后还要去重,代码250行左右,这个题是真的大。
T2...c可以是负数...我打的暴力中值域线段树没有负数...话说为什么都打了一个暴力了还要线段树维护呢?每一个点直接开一个桶维护一下,在最后每个点排一下序不就行了吗???是真蠢。正解貌似是线段树合并,考试时也想过先离线,以时间为线段树下标,在树上做线段树合并,但并不知道怎么统计答案,就是不知道怎么去重。其实现在也不知道怎么实现,hfu说线段树合并超纲了不用管,我也就没改了。
T3???这出题人是真恶心,数据范围都没有给对,n为500时,m明明为500。当然也有我的问题,中间有一些点写出了m为500,但我并没有认真看中间的数据范围,只看了最后的一个数据点,于是就被坑了。结论还是猜对了,像这种反正也打不来,不如打一个结论,管他是不是对的,运气好就可以撞到分。具体的证明就有些不会了,好像可以分情况讨论。题解?$O(N^{3})$的蛇皮算法。
10.30场
开场先读题,T1貌似与差分有关,T2又是期望???T3毫无想法。感觉T1可做性更强,就开始研究,想了一会儿感觉只会$O(qN)$的算法,一个47分的算法,需要对一列中连续的一段,和一条斜线中连续的一段打差分标记,然后我想肯定不能直接枚举行打标记,我想直接在几个点上打标记,然后魔改前缀和,最后魔改失败,多打了一个特殊数据后去做T2了。T2的n只有30,似乎记忆化搜索可过?码了一个字符串Hash,常熟巨大,感觉30的点不可过,但20肯定没问题,码完后,输了一个20的数据进去,死了,发现Hash表里存原值的数组开了一个int,而不是ull,改了一下,可以跑20的数据了,就没管了。T3打了一个1分的算法...然后考试结束了。
期望得分:61+47+1=109
实际得分:47+2+1=50
T1...我是傻逼么,都想到了要给一列中连续的一段,和一条斜线中连续的一段打差分标记,居然没有想到再用一个差分标记维护一下就行,最后做两次前缀和就有每个点的值了,居然去想魔改前缀和???
T2...又一次猜到正解...正解就是Hash+记忆化搜索,但不是字符串Hash,常数太大了,用01表示状态,选一个字母时,就把那一位左边的01串整体右移一位,用位运算实现,这样就可以省去每次重新Hash一次的时间复杂度。当然考试的时候也没有对记忆化搜索的状态做太多的考虑,其实我们并不关心这里的状态是怎么得到的,即究竟是哪几位被选了并不重要,因为当前状态的期望仅仅与现在的所剩的字母的状态有关,也就是说只要剩下的序列相同就会的到相同的答案,而我考试时没有在这方面思考太多,把被选了的位置留了下来,并没有把它消掉,这样的话就T了。还有一件事,其实我的这种方法拿47分绰绰有余,但我Hash表内存期望的数组开的int,于是就炸了...
T3的话,考试时并没有认真地研究过,其实认真研究一下的话我感觉还是有可能想出来的。这是一道树形DP,网上的DP状态转移时的处理比较方便,感觉自己在写的时候不会这么写,大约状态转移时会多个20行吧。DP题还是得多练习。
10.31场
开场先读题,T1蓝皮原题?推了几下,似乎是dp?看T2,感觉不可做。再看T3,还来期望DP?再看,课件原题?今天怕是有人AK哦,先码完T1,搓了几个数据,不对,静态查错,发现转移时没有乘2,改一改,数据过了,感觉比较稳。做T3,没有看课件,自己推了一下式子,还是挺好推的,写一写,维护两个根缀和,再写个链剖求lca,过了样例,静态查错,感觉没有问题。回头想T2,一个小时无果,一个暴搜安排上,突然发现T3要取模,重新打开T3,加上取模。然后就坐等考试结束了。
期望得分:100+30+100=230
实际得分:100+30+100=230
终于估分估准了呢。果然有两个人(sxk, lwq)AK %%%。wys T3没取模 280 %%%。ZJH T1炸了 270 %%%。
T1,略
T2,其实不应该只从理论上分析,应该举几个例子模拟一下的,就应该发现一个位置的字母,与排名相邻的位置之间的关系,它们能不能选相同的字母,与前一个位置排名的大小关系有关,画一下图,举几个例子,是应该可以发现这个性质的,考试的时候开始没有思路,就开始乱搞,其实这种时候应该举几个例子手动模拟一下,寻找一点思路,不应该乱想,导致思想一片混乱。
T3,略
总结
这几天的考试都考得不好,大部分都是自己的原因,菜是原罪,自己还需要多练习,多提升自己的水平,多提升自己的思维能力,距离CSP-S只有两周的时间了,抓紧时间努力吧。
//无意间就写了2500字呢
2019-10-31