常测长策(20180222~)

  已经很久没有写过测试总结了,主要是2月22日的测试题很有意思……

20180222 戊戌年正月初七 THU YYR S2

  这套题目,嗯……

  T1是一道很好的DP。需要充分了解凸包的构建过程。仔细一番考量后,我们可以发现凸壳中加入新结点时只会判断之前队列的最后两个点,而一个点通常不会反复出现在同一个凸包中(多点共线除外)。于是我们可以设计出一个做法:定一个点,然后用O(n2)的状态做O(n3)的转移。这样是O(n4)的,但是YYF在此基础上跑SPFA就玄学AC了(其实要卡也确实很难)。不过,至少共识已达成,我们要求一个图的最长路。考虑这个图的性质,可以发现各状态是前后相衔的,而且一条路径各状态其向量都呈现稳定的偏序关系。有偏序关系意味着该图是一个DAG,而且拓扑关系明了,不用拓排直接sort即可(极角排序使用atan2)。接着再考虑,一个状态可以对应其后所有与其首尾相接的状态且悉数等价,于是可以使用maxdp[i]作为中转站。再考虑,其实DP数组根本都不用开,最后maxdp倒成了题目中的数组,而对应DP不过是一条边,如斯想下去则题目又得到了另一重解释,实现也更加简洁美观。

  疑问点:不知道为什么,我爆搜求凸包是错的!

  T2是一道不错的平衡树启发式合并。平衡树维护的是一棵分段函数,其实并不难想。但最重要的是,跑这道题的速度出现了很多令人无法想象的东西。如我写的启发式合并treap,如果结点的rd是最开始设定的之后不变,则会被卡得像BST一样慢甚至比BST慢,而一旦rd随着结点身份变化而改变则跑得飞快。而二分的过程,如若直接在树上走,则可以从2xx~4xxms直接到1xxms,至少快上2倍。又如splay,再怎么卡都只有递归操作3600+ms直接旋转7800+ms。如若单旋则直接被卡,而双旋若变成一半概率单旋一半概率双旋,则会变成递归操作2300+ms直接旋转4500+ms。而在启发式合并过程中的splay操作看似毫无用处,最后插点的splay操作却至关重要。反正,不知道为什么splay跑得很慢。

  至于T3,循环卷积的理论看得我一脸蒙蔽,还是先看完“再探FFT”再说吧……我们可以把序列看成xN = 1 的循环多项式,接着考虑离散傅里叶变换(DFT) 是相当于把N 个N 阶单位复根带入求点值,而逆离散傅里叶变换(IDFT) 则相当于做了插值。所以我们求出点值,再对点值开方,再插值出多项式,就可以求出原多项式了。注意复数开方有两个根,而由于对称性,我们只需要枚举半边不超过K = ⌊N/2⌋ + 1 个根的选取情况,插值出多项式并判定即可。所以就是先把序列DFT,然后每个数字开方,2K 枚举开方时选取哪个根,对于每种情况IDFT 回去并判断是否合法,再更新答案即可。由于N 很小,DFT 和IDFT 暴力即可。时间复杂度O(T2⌊N/2⌋+1N2)。

  后来,YYR在2月23号过来了,讲了T3,终于意识到DFT&IDFT是循环卷积。之后看了MYY的论文,意识到完全可以O(T2⌊N/2⌋+1NlgN)。

  啊啊啊啊啊。

20180223 戊戌年正月初八 FRI YYR S3

  这套测试……

  T1就是BZOJ 4773 负环。做法与心得已经写下了。还是好题。

  T2是一道树上的阶梯NIM。我是不知道可以怎么想出来的。觉得自己的博弈论特别弱啊……

  T3是BZOJ 3654 图样图森破。特别的码农啊……然而字符串转图论也确实是很好很好的题目,不知道什么时候能做。

20180224 戊戌年正月初九 SAT Codeforces Round #466 (Div. 2)

  今天做的很揪心,17:35:00考到19:35:00。

  因为考试时间和平常饭点冲突,我、ZJC和YYF点了外卖,显示。

  考试开始前,整理了一下桌子,YYF提醒了自己几次。当我看到A题的时候,YYF正厉声敲着键盘,红太阳说ta已经AC了。后来过了很久,都还是没有看懂题目的意思,整个人就非常伤心。我去询问,结果并没有听懂。就更加伤心了。

  没有办法,去看B题。最开始写了一个正着的,样例有的没有过。于是想到了NOIP之前和胜利一中联合考试的时候,有一道T1是这样的:“一开始你有一个数S,你可以通过两次操作改变这个数的值:给这个数加a;给这个数乘b。求最少通过多少步可以将S变成T。”B题反过来,和这个一毛一样,直接枚举乘多少次就可以了。不过,中间因为某些位置特判的问题(例如k进制下更高位有数也是合法的不过代价更高、k=1的时候不能for下去)。3发WA后(18:09:41、18:11:30、18:17:22)才A(18:28:13),此时时间已接近一半。

  A掉B题过后,赶紧去问YYF到底A题是什么。YYF说清楚了A题很水的题意,于是自己赶紧写。但是交上去WA了(18:33:21),整个人更加迷茫。

  但是没有办法,之后去看C题,发现这是一道很水的题目。但是一看friend standing,发现ta们早早都A了,整个人就更着急了。写出来就赶紧上传,幸好一A(18:49:34),此时还剩45分钟。

  然后再去看D,本来很简单,但是因为题目没有看完(特别是样例解释),交上去WA了2次都不知其因(17:08:48、17:11:07),19:24:37终于AC,此时只剩10分钟。

  这个时候QJX说她AC了E题……但是她所说的过于玄妙,导致最开始我们都持怀疑态度。就是说分段只会分c和1。但这个贪心或归纳的去想,可以发现任何长度>=c的分段都不如分成c和1,因为分成c和1删掉的数可以相对保证一定,而分了之后一定不比不分差于是得出结果。这个东西使用单调队列可以O(n),但使用堆则更好写,如果最后10分钟信了QJX的话还是可以写出来的。

  但是我没有,我弃了坑。最后看A题,发现当d==N(100)的时候会有问题,于是加上就A了(14:32:40),考试结束。

  最后,所有人都只A了4道题目,QJX的C判挂了,我们则是没有写出E来。

  而Amphetamine实在是太强了,4分钟A题,11分钟B题,26分钟E题,37分钟C题,59分钟D题。最后32名,去掉div 1的选手后16名,一个小时结束战斗。不过,到底是我太弱,还是ta太强了呢?

  不过,其实题目并不难,倒是心态至关重要。像B题,正着写当然也是可以的,但是当时自己吓了自己。自己吓自己,只会让自己不好受啊。

20180226 戊戌年正月十一 MON YYR S6 DS

  我能说三道题我都见过么……

  T1在Bashu的时候思考过,是一道静态仙人掌。一个环一棵线段树,然而还是好复杂不会做……

  T2就是MHY的Abnormal已经做腻了,要么直接莫队,要么主席树/离线+树状数组/平推+线段树。

  T3曾在Floj上看到过,就是BZOJ 3338 [Pa2013]Raper,很好的一道线段树括号序列维护。

20180303 戊戌年正月十六 SAT YYR S5 MA

  啊。

  T1是BZOJ 4770 图样,当时YJQD5说最小xor生成树很水,百思不得其解在网上搜索最终得到这个结果(但还是不会做)。不知道ZYC振振有辞的“真丶最小疑惑生成树”怎么做……

  T2叫simple但不simple,用到了循环节那套理论最终转化成杜教筛。

  T3那个mate确实很水,但是之前确实没有想到拆迁队暴力也可以和预处理阶乘逆阶乘相结合,结合之后就真的天下无敌了(大nm模小质数除外)。

20180306 戊戌年正月十九 TUE YYR S7 GR

  嗯。

  T1也很好的,想了好久才想出那个数形结合的解法。枚举边,然后每个点的函数图象就是那么上去45°下来45°,三分不可行二分很复杂(或不可行)。完全可以存顶点,按x排序后构造一个栈,之后看首尾与边界的交点以及相邻函数图象的下交点,然后问题就得到了解决。这是宏观的看法,题解中说的是另外一种扫描线式的看法,一个直接维护另一个用堆也是很优秀的。WYS使用了恶毒的骗分,就是先用Floyd找到最符合答案的顶点,之后往离他最远的点走的边进行三分,猜测可以三分且猜测答案在那样的边上居然也有90!

  T2是BZOJ 4283 魔法少女伊莉雅,题解有一个《escape》命题报告,一大堆图论定理,不知道网上那些“建出来后特判一下”是什么意思。不知道ZJC的猜想的正确性,不知道为什么WYS骗分就有了90分。

  T3是BZOJ 2673/3961 [Wf2011]Chips Challenge,好像是一道费用流的样子……

20180309 戊戌年正月廿二 FRI 联考D1 / 20180310 戊戌年正月廿三 SAT 联考D2

  第一天很崩溃。早上打开vim,觉得要模拟考试场景,于是重新敲了一遍配置,然后敲出了model.cpp,然后打开了statement.pdf。却发现YYF已经开始大敲代码(只要YYF大敲就说明ta恍然大悟了一道题目并胸有成竹地开始刷刷,最近频率越来越高),而我却无论如何都无法下手T1,题设很像二分答案却始终想不出check。这个时候,Hfu进来说:“只考4个小时!”,于是我便无好气的回应“反正都不会做……”,心态就已经崩溃。

  后来,我并没敲T1显然的40分暴力,然后去看T2,想了一想找到了O(mk)的做法。觉得复杂度太高就输出了一下每一轮的结果,发现前2个样例都有很小的循环节,于是写了找循环节的做法最后拿了70分(虽然第3个样例并没有跑出来)。我去思考为什么会有循环节,直觉性地想到了“置换”和“逆序对”,却始终立足于整轮的影响,最后并没有发现差分出的swap性质。

  中间Hfu进来,对“只考4个小时!”进行了解释,然而当时更不爽“反正都不会做!”。

  然后去看T3,哇神题妈妈我不会做……于是去看T1,精神崩溃走神良久以后终于写了暴力,暴力中的check给了我一定的灵感,我对于每一个人都是从头开始判定,判到有了的项目就开始累加。我想二分答案的check是否也能这样,于是开始大胆YY。但最开始还是三贪取最优,后来发现可以用vector,如果有非法的就直接杀死。至此已经想出,最后意识道可以queue。想到这一点的时候就只剩半个小时了(谁让只考四个小时)……可惜没有跑出大样例。中间人非常迷乱,因为我自己rand了一组数据。如果二分答案两次,那么答案会不一样。如果预先check一次,答案也会不一样……这个时候,其实应该十分果断地意识到是没有清空的问题,然而脑袋可能过于紧张……

  最后,40+70+5=115(T3 puts"0")。T1因为check没有清空queue少了60分,终于明白CKY高一寒假讲图论BFS的时候为什么要反复强调在开头清空queue了……其实什么东西,只要执行多次都必须换换脑筋,还好我写dijkstra和SPFA都有清空queue的习惯……想起Hfu说的TYH挂掉THUSC的故事,觉得很有感触啊……不过,只要足够强,不去THU和PKU又能把我怎么地呢……

  第二天的题就很水了,YYF说这是“省选T1合辑”,还说“省选T1合辑”能AK,“省选T2合辑”能拿40%~70%的暴力分,“省选T3合辑”能爆零……如此算来,大概就是两天280~340+?的水平了。

  T1很水,但却是最后做的,成型的思路还是深入思考了一会儿才出现的。想到a可以直接算,那么枚举b和c即可。再想就是for一遍加入b查询c了,但我却天真的意味线段树很安全……最后被卡了20分的常数,改成树状数组才AC的……

  T2即“BZOJ 3252 攻略”与“[SCOI2017] D1T1”。回想去年这时候就能AC的题目,如今实在太水了……而且这题lemonoil在去年国庆节讲DSU on tree的时候把“攻略”当热身题讲……本来要考四个半小时的就因为这道题目少了半个小时……

  T3是一道floyd矩阵题目……最开始只想到了O(n*n3log k)的做法,后来一拍脑子把n个统计格子全部塞进了矩阵里,就诞生了“左上n*n邻接矩阵,右上n*n单位矩阵,左下n*n空矩阵,右下n*n单位矩阵”的2n*2n的矩阵。再考虑会发现其实可以只用2个n*n的矩阵,思考意义就是一个floyd矩阵,另外一个统计和矩阵。合在一起快速幂,就十分优美地找到了ΣFk的性质。YYF写了递归版本的,但其实跟这个一毛一样。

未完待续……

posted @ 2018-02-22 21:27 Doggu 阅读(...) 评论(...) 编辑 收藏