GDOI2018

前言

该拿的分一分不失,是我本次GDOI最成功的地方

Day0

考前延续了在JZ腐败的习惯,直到十点半还在淦CR,突然意识到我自己可能真的完蛋了,于是删了安卓模拟器来复习模板(事实证明并没有对后面的解题起到作用但是直到心情恢复了一点)

带着非常慌张的心,抱着自己带的抱枕,还是睡着了

Day1

早餐超级好吃

直到走到了一中才发现天气热到爆炸,还好考场里面有空调,路上一直在看自己博客里面的FFT模板

开考前30分钟,马上开始写FFT和多项式求逆,希望如果能碰到一道裸题就是血赚(然而,我数学功底这么差肯定是没戏的)

看看题目,T1比较好玩,枚举一下因子加个break就好了

第二题,看起来很眼熟,也想到了差分,but问题就在于,我之前做过一道题目,也是一样的大意,只不过只能向着一个方向转而且不可以取模,于是就在这里被困住了,想到了差分但是没有想到正解,开始往dp想

我们发现一件事情,一个位置显然不可能又被加也又被减,证明是显然的,先看第三题

T3发现如果没有修改,就可以直接上主席树,所以把修改拿出来单独计算贡献

修改是一个三维偏序的问题,时间,时间+深度,子树限制三个维度

沿用上面的思想,可以写一个BIT套主席树,这种东西我考场上肯定搞不出来(我太菜辣),让后感觉我凉凉了

回去淦第二题

发现了这个性质,以及第二个样例说明的性质(可以将一个数加上m使得答案变小)我们可以写一个dp

用f[i][j]表示做到节点i,j表示这个i被进行的操作是加还是减

由于我当时还有一个结论就是,一个位置的数被加上m不可能超过1次,所以j就有四种状态(减去a[i],加上m-a[i],减去a[i]+m,加上2m-a[i])

那么转移就直接枚举j和j' 如果j和j' 奇偶性相同,那么肯定就可以延伸,f[i][j]=f[i-1][j']+max(0,a[i][j]-a[i-1][j'])

否则就只能重新开一次操作(前面已经证明不可能又加又减)f[i][j]=f[i-1][j']+a[i][j]

那么我们就得到了一个比正解还要优秀的复杂度O(n)的算法

然而它是错误的,测一下稍微大一点的样例就发现了,至今我还不知道为什么这个算法是错的

不过我还是把这个dp交了上去因为它可以过掉n=20的那个样例,所以我觉得应该可以拿到前20分

回来一看第三题,突然想到可以cdq分治(为什么这么晚才想到),让后愉快的60行随手一写就没有了

第四题看了一下,知道jz讲过,不过我当时就是一点也听不懂,所以现在知道一定不能花任何时间在上面(事实上,我三天都沿用了这个策略,所以才有比较多的时间来淦前面三道题,做到比估分一分不少)

出来了发现周围都300+,知道自己凉凉了

Day1'

讲题很好啊,第一题出题人说数据很水我就放心了,因为我太懒没有用前缀和来判断,复杂度应该是O(n*σ(n))的,很虚

第二题听到samjia讲出正解就心态崩了,本来还想上去讲一讲我那个dp但是知道自己没戏了

所幸第三题正解和我做法一样,稍微比较安慰

T4没有认真听,听了也听不懂

发成绩了:orz whjAK爷

自己220,仔细看发现第三题90pts?莫名喜感的WA

第二题多了两个点的分数,所以和第三题抵消了(感觉可以和同学吹一年了:我就是那唯一一个90分的!

让后就去皮了,因为成绩条上面那个220的0被卡在边缘没掉了,就和别人吹我22分,全校最低,结果被sqlyy怒怼

晚上躲在酒店淦三国杀,心态轻松不少,也是随便看了看模板就继续抱着Misakaの抱枕睡了

Day2

早餐没那么好吃了因为制度改了,随便吃了一些去背模板

沿袭了昨天打NTT模板的习惯,还把昨天打错的一个地方改对了

结果也没有用到

T1题目太长了啊,不知道在干什么还十分暴力,先看看T2

T2特别玄学,意思清晰易懂但是我并没有什么思路,看到有个k次方我就知道我这题可能凉凉了

T3看到我就十分激动,线段树!单调栈!随机!让后没有认真想就回去淦T1

T1十分艰难的看懂了,感觉建好图就可以二分+dijk了

but建图开始懵逼,一开始理解错了,以为是求互质数对的个数

手推一堆式子发现不对,才意识到是要求互质数对之和

那么思路就很明显了,设f(d)=∑∑(i+j)*[gcd(i,j)=1] (1<=i<=n , 1<=j<=m 这里n,m是两个点的魔法师数量)

搞一个F(d)=∑f(n) (d|n)

就可以得到f(d)=∑F(n)*μ(n/d) 

让后我第二次搞错了,我以为要求∑f(d) 搞了一堆东西,然而其实只要求f(1)

可以预处理一个μ(d)的前缀和让后就可以分块除法了

但是问题又来了,我发现分块除法似乎并不能算出正确的f(1)

调试一下发现问题了 F(d)不知是和n/d , m/d 有关而且和d也有关!

感觉100分是不行了,改回60分吧

想想T2T3感觉t3可做一点,去淦t3

随手一个线段树加上单调栈合并,手打一个O(n^2)的合并,大样例炸成没法调试

回来一想F(d)的d不是可以提出来吗,乘到μ(d)那里面去做前缀和不就完了吗

一发过掉大样例,暗喜之余回来淦T3

t3代码直接全部删掉重构,写着写着想到一个O(n)合并两个单调栈的答案的方法

由于题目写着数据随机,放心大胆的把线段树的每个节点开vector来存单调栈(事实证明这样一点也不优美)

让后开始写两天来第一个对拍(因为大样例太大了)

随便调了一调,过掉了大样例,然而用了4s而且我已经手动开了氧气优化

大样例才5w啊感觉凉凉了

比赛快要结束,当时就觉得特别的急,都快砸键盘了,也没有想到什么更好的优化了

于是day2就end了

Day2'

下午听讲评迟到了,问了一下lyyT1正解知道自己应该稳了

T2什么斯特林展开,也听都听不懂,反正数学题都是见到就是赚到

听完T3正解更加加强了我凉凉的心情,链表加上数组,一个log,感觉可能我那个就真的只有暴力分了

T4没认真听,题面都记不清了

所以开始一波不正经的估分100+0+70+0也不知道为什么当时我觉得我T3能赚到70分

结果成绩发下来T3真是70,看了一下,1600ms+ ,感谢一中评测机

感觉人生充满希望,第一次进到day3

于是晚上开始浪了,但是依然没有忘记抱着抱枕睡觉(这是最重要的)

Day3

早餐制度又改回来了

感觉今天就是要放松,因为我估计我可能一道题都不会做的,多水水就好(事实证明我错了,T2T3我都是当场就想出了正解的)

考场气氛颇为神秘,中途还跳闸?

看到T1感觉是一个偏序问题?想一想数据结构发现不行,于是开始想暴力:建出竞赛图之后只要遍历一下就知道可不可能胜利了

然后正常人应该都是去想tarjan缩点求强连通分量

然而我感觉tarjan好像忘了怎么写了(捂脸)于是先写了个floyd

floyd这个东西,明显是可以用bitset优化的嘛,让后测了一下时间11s,知道自己没开氧气优化,开了之后就1.6s稳稳的了

看看T2

看了一下以为要动态点分

不过很快就考虑到一个事实,我们走到i,距离的增量就是len[i]*(n-2*size[i])

那么50分就到手了,开个数组维护一下size就好了,每次从1开始往下走,等等,这样好像还要预处理每个节点i子树所有点到他的距离之和dis[i]?

这个东西我似乎没有办法在O(lg n^k)内求出来,于是便和100分失之交臂

本来如果可以求出来那么本题就做完了,开个map维护一个节点size和dis的增量,因为一次删除最多影响到log个节点

50pts-

第三题,看了一下要求一个路径条数,很快就知道是网络流

让后,字符串?后缀自动机!

这和我考前和别人吹水说“今天有一道后缀网络流”不谋而合

完了,这100分放在我面前就这么跑了

其实如果我当时打了网路流,应该还是有戏拿到50分的,因为可以把那些串插入trie让后每一层的节点个数就是最少需要的路径条数

这里的50pts也没了

而且没有大样例,我对前面的110分能否拿到都感到很悬

就这样,GDOI day3结束了

Day3'

正解我大概都知道是什么了,T4不想听,于是下午便没有去

T1是线段树优化连边,但是我没有写过,而且似乎还要一些偏序的求解才能过掉

T3果然和我想的一模一样,T2想想就知道应该是这样的

下午一直在淦游戏,晚上也是,不过还是按时抱着抱枕睡了

Day4

看了看排名,30

自己水平太差无话可说,但是看到我排名前面几位大佬,突然为它们感到惋惜

cty,mj两位高一神犇这次都翻车了,不过他们明年就肯定稳了

最惋惜的就是ymw大佬,看到他day2 95pts我就似乎明白了什么,和他一起做的几次模拟赛,他都是前3的排名

本来以为他是稳稳的队爷,真是太可惜了。

后记

听说30名可以申请**USC了,那么,6月见!


posted @ 2018-05-05 22:04  扩展的灰(Extended_Ash)  阅读(273)  评论(0编辑  收藏  举报