51Nod 算法马拉松15 记一次悲壮而又开心的骗分比赛
OwO 故事的起源大概是zcg前天发现51Nod晚上有场马拉松,然后他就很开心的过去打了
神奇的故事就开始了:
晚上的时候我当时貌似正在写线段树?然后看见zcg一脸激动告诉我第一题有九个点直接输出B就可以A。。
然后之后zcg以奇怪的二分方式发现了如何A掉第一题的第十个点(我记得貌似是什么第5000个数等于511?
OwO 就这样没有任何思考含量全凭骗分黑科技过掉了第一题 OwO
然后zcg打开了第二题,发现第二题样例有点问题,然后就发了个帖子,直接去看第三题了
我去瞅了一眼,发现这不是gcd array的裸题么?然后zcg去粘了一发那道题目,然后改了改就交了
结果悲壮的T了,我们惊奇的发现貌似gcd array原来O(n*sqrt(n)*log(n))的做法过不去
出去跑步回来zcg开始推式子,推了不到20s他扔下笔说这不是思博题么,然后就开始写
我凑过去一看发现把gcd(i,j)=1莫比乌斯反演掉就是O(n*sqrt(n))的复杂度了
大概在要回宿舍的时候A掉了
第二天起来发现第二题题面改了(其实我是很久以后才知道这件事情的,想原来的题面想了好久。。
上午考了场自己被卡常滚粗的考试,没有顾得上51Nod
下午发现一大批人都过了好多题,zcg发现E题貌似是个数据结构,然后就去搞E了
我下午一直在改考试题,貌似zcg和溪哥化模型化了很久,然后溪哥过来给我说了一道我看上去跟E题完全没关系的题目
我当时大脑非常懵逼,看着这个题目YY了一下分块,发现好难维护,然后开始口胡要离线
口胡完离线之后发现还是好难维护,然后我又开始口胡要维护个树状数组什么的bulabula
貌似圆满以非常诡异的O(n*sqrt(n)*log(n))的时间复杂度解决了这个问题
之后貌似zcg和溪哥又讨论了一些关于字符串的奇怪的问题,最后貌似得到了奇怪的但是非常优秀的做法?
我在旁边一直说什么n<=50000,O(n*sqrt(n)*log(n))根本不虚的话来给zcg加油助威
zcg吐槽了一句好难写之后开始码码码,容我先回想一下他们的做法:
貌似是要建trie,建广义后缀自动机,搞出parent树,然后要拉出一棵主席树,之后做一个奇怪的分块,还要把所有询问离线。。
(这模型化的6的不行啊
不过zcg码力超群,这么坑爹的做法他飞快的码完了,在WA了几发之后对着对拍改了貌似两个错误就A掉了这道题目
最后听zcg说写了8K。。
下午lyc发现第二题题面改掉了,想了想,发现了一个非常有用的性质
然后写了一发数位DP成功A掉了B题
随后zcg也相继A掉了B题
发现排名貌似不低,再A掉一道题就有奖金了,一阵激动
然后就回宿舍碎觉了
第三天,也就是今天,zcg发现有一大波人排在上面
F题貌似除了dls没人能A,我们决定去搞D题
窝上午头痛欲裂,写了一道CF的C之后就已经完全支撑不了自己的意志了
完全想不了题,一想题就头疼
然后就专心去看D题,准备口胡一些奇怪的做法
n<=35?貌似可以meet-in-the-middle?
想了想貌似信息合并不可做
突然想到之前做过一道数位DP带上LIS的东西的状态压缩的做法
然后就瞅了眼那道题,回想了一下做法
脑补了一下有用的状态貌似很少?然后就开始怂恿zcg去写
zcg写了一发发现随机数据跑的飞快,然后交上去只T掉了8个点OwO
然而还是0分,特判了一发完全上升的排列,然后T掉了7个点
然而还是0分,算了算貌似只要在A两个点就可以有5分了
开始准备搞一搞看看能不能优化些东西,我头痛欲裂不想继续想了就去看看meet-in-the-middle能不能做
一上午并没有什么结果,只是又多了几个人A掉了D题,心慌ing
中午回去碎觉,思博的窝自以为想出来了正确的做法,跑过去跟zcg说,结果刚说几句话就发现有问题
下午来到机房发现又多了几个人A掉D题,更加心慌
这时候lgl提出我们可以利用黑科技,我虽然不是很喜欢这种做法
但是为了奖金OwO,然后我们几个人就开始用各种奇怪的方式搞数据了
策爷的数据真良心啊,只要知道貌似前三个数就会发现这个序列是有规律的?
然后机智的不到半个小时搞到了所有的数据,开始搞答案,发现内存开不够,状态数太多了(说好的看上去状态数很少呢?
zcg怂恿我写暴力,我说暴力求LIS的O(nlogn)要写的常数很小才可以,我好虚啊
然而最后我还是被逼着写暴力了,写完了之后把程序发给了机房众,然后机房众齐心协力开始搞答案
从貌似差不多三点左右开始跑,到了快五点的时候所有答案都齐了
zcg机智的A掉了D题,但是并没有什么卵用,因为A掉D题的人太多了
zcg rank11 刚好没有钱 sad-story。。
我们悲伤欲绝,突然发现貌似策爷因为是出题人所以不计排名?然后zcg卡线拿钱?
机房在那一瞬间貌似都跳了起来,OwO 我们都在欢呼 OwO
感觉那个时刻好开心啊,很久没有这么开心了呢
这个时候我场外求助到了一些可以精简状态的做法,然后怂恿zcg又去写了一发D题
然后测了测发现跑的不慢,交了一发还是T了7个点
然后测了测自己搞到的数据,发现了程序貌似有奇怪的bug,改了改发现状态数大概400w上下
貌似要跑1.8s?然而时限只有1.5s,拼命优化常数,然而还是卡不过去,so sad
绝望的窝放弃挣扎了,决定等比赛结束看题解了OwO(应该还有更精妙的优化状态的做法?
(他们D题为什么都AC得辣么6啊,有没有老司机教我D题的正确姿势
最后的最后去看了看F题,发现并没有什么好的思路,就连分块打表也做不到
看来果然F题没几个人过是很正常的啊
不管怎么样,马拉松总算以一种奇怪的方式打完了
不管最后能不能拿到钱把,感觉这几天过的好开心啊QAQ