GDOI2018事故记录

前言

  我必须狂喷一中:他们为毛要主办GDOI啊!害得我不能住酒店了。(其实是没什么借口请求带手机

Day0

  由于我家就在中山,并且距一中不远(大约15minutes车程),于是便没(bu)必(ke)要(neng)住酒店。
  而又由于我们学校也在中山,所以我们下午还上了两节课……不过幸运的是我们班下午第二节是信息课,所以拿来临阵磨枪。我复习了一遍网络流,然后还打了JZOJ上的、名曰“狼和羊的故事”的一道题,不过WA了。
  我们16:00便要出发看一波考场(这次比赛竟然还有“看考场”这种操作),不过我记得是16:10+车才姗姗来迟。
  至后,我们领了胸(gou)牌、黄衣服还有一个绛红色的袋子。
  回家后,我把那道网络流的题切了,这是TJ;然后又复习了能在比赛中大显神威的对拍。大约22:30 go to sleep。

Day1

  我6:45 get up,然后7:20抵达一中,又花了3~4minutes走到考场,发现早到的童鞋们寥寥无几,而那群参加过的都有先见之明,全都木有早来。
  为免虚度光阴,在约摸7:50的时候,我又叫lyx把他已然关机的手机给我,复习了一波扩展gcd。
  然后,及至8:00,考场才给进。(早知道7:50来了!)
  我点开压缩文件,点进题目,发现要输密码,于是问身边一位监考老师,他答:“现在还不知道。8:30才开始比赛。”那我就更应该7:50来了!
  于是是前所未有的试机时间。我敲了个splay。
  8:30,发密码纸。我一看密码:“tiandihenaiganyujunjue!66”,心说:“卧槽,这不是《上邪》中的‘天地合,乃敢与君绝’吗?!”(原谅我秀诗词)
  
  我一看题,发现T1木有GDKOI的T1那么又丑又长,顿感身心愉悦。看完后感觉T1二分,T2感觉很诡谲,T3感觉某种神奇的数据结构,T4的话,感觉只能考虑打暴力了。
  
  然后滚回去思忖T1,打了一点,发现不满足二分性,于是胡思乱想一通,突然灵光一闪:我们可以先求一波前缀和sum,然后枚举面积mj,而某个mj是可行的当且仅当:1.mj|sum[n];2.设 c n t = s u m [ n ] m j ,则sum中必然要出现mj、2*mj、3*mj…cnt*mj。
  于是开个布尔数组记录sum中出现的数,然后枚举mj,再枚举它的倍数。由于我们枚举的mj和它的倍数均不超过sum[n],而 s u m [ n ] 10 6 ,所以复杂度最多是 O ( 10 6 l o g 2 10 6 ) 的;况且仅当mj|sum[n]时,mj才有算的必要,所以复杂度远小于上面那个数。
  
  切完大概9:30,滚去思忖T2。我左思右想,也没想出来,反而空耗了30minutes。这时,我告诫自己:我不可能切了这题。于是滚去思忖T3。
  
  T3的话,我想了一会维护整棵树的数据结构——LCT、链剖,但我发现如果模拟题意去维护的话,每个时刻都要对整棵树的所有节点进行修改——这样就很持矢。于是我思考暴力分。
  首先,点1是小数据,纯模拟即可。
  点2是一条链,我打了个树状数组去维护。
  点5、6,数据满足询问操作中的“x”=1,即询问的是整棵树。这时就不免分析一下题:小明每天早上摘掉根的苹果,而其他苹果又会在下午下落一层,所以就相当于整棵树下降一层。考虑dfs一遍,将所有节点按照deep分层。那么当t=1时,询问的是整颗树;当t=2时,去掉第一层的贡献;当t=3时,去掉第二层……如果魔法师在第t天晚上让x号节点长了苹果,那么其实就相当于给第deep[x]+t层长了苹果。

  打完后业已11:00+。滚回去思忖T2。我依然没想出个所以然来,不过大略想了想m=2和m=3的情况,我认为m=2时答案应该为连续的1的段数,m=3则没什么想法。
  最后打了个20points的暴力,连m=2的情况也没时间打了。

  大概12:00+的时候,我看了看T4,发现按照我起先的想法:暴力枚举每一条边的方向再套个tarjan怕是过不去——30points的n都≤3000,边数则最大9000000,这是要 O ( 2 9000000 ) 的节奏!故没打。

  期望得分:100+20+40+0=160。
  
  午饭虽说比纪中的平民饭堂好吃,但也不大敢恭维。
  午休的话,则是去了办公楼5楼报告厅——其实我丝毫木有午休,而是一直在看lyx腐吃鸡和皇室——没带手机好不爽!!!
  然后我发现这就是讲题的地方。15:00开讲。
  T1花掉我1hour(想+打),结果讲题人ppt三页(包括题目)……
  T2的话,大概就是把它转化成差分表,排个序,小的减、大的加……
  T3,我一开始以为可能是LCT或者主席树之类的,没想到就一个扫描线+线段树!这种题我做过多少回了,竟然木有想到!!我屮艸芔茻!!!
  T4,果然是道神仙题,需要运用NTT……
  
  然后发成绩单了:100+20+40+0=160。感觉还是比较可以的,不过本可以多拿个10points(T2)。
  
  夜,我感觉Day1木有数论,Day2估计会有,于是复习了一波线性求逆元、裴蜀定理、中国剩余定理。大约22:50 go to sleep,不过估计23:00+ fall asleep。

Day2

  Day2就是今天了。
  有先见之明,7:10a.m.才起床。不过有所磨蹭,卒致7:50+才到。所幸进入考室before 8:00。
  试机时间,我快速地码了个网络流。然后看还才8:00,便又码splay。
  今天竟然8:10就开考了,令我有些惊异。其时我那splay还功亏一篑,于是我就先码完了它。
  
  首先看题。T1感觉不太能切;T2感觉题面的那个公式有点问(when)题——里面的V当改换成S,而且样例2也有问题——第一行当输入3个数,我于是举手致意了监考老师,不过只告诉他了样例的问题;T3感觉是道神奇的数据结构题;T4的话,感觉很奇异——范围这么小,暴力似乎都能过!
  
  然后思忖T1。思忖片刻,我发现设若求出了每条边的边权,那么余下的打个二分+spfa即可轻松解决。所以关键是计算边权。我略微感觉可能可以用Mobius反演,不过没有细想——我木有做过这么奇怪的Mobius反演,感觉不大可能,而又不想浪费时间。所以我最终选择先 O ( m a x a i 2 ) 预处理ax、ay间的答案的二维前缀和,然后每条边直接对应上,也即40points做法。

  此时大概10:00,我滚去思忖T2。
  T2的话,我苦思冥想,也木有想到正解,于是转向暴力分。
  首先,点1范围极小,可以手玩。
  点2、3,k=1,也就是说, A n s = S V | f ( S ) | 。那答案就是每个子图中导出的边数和。考虑对于一条边i,它会在哪些子图里。显然,当且仅当 u i S v i S 时,边i才会在S中。于是可以转化一下, u i v i 同时出现的子图数,其实就等于你将这两点固定在子图内,然后其他点可选可不选的方案数。
  点4、5、6,k=2,所以 A n s = S V | f ( S ) | 2 。设a、b为两条边,f(S)={a,b},则 | f ( S ) | 2 = | ( a + b ) | 2 = | a | 2 + 2 | a | | b | + | b | 2 。所以每一条边单独出现,则构成 | a | 2 = | a | = 1 的贡献,计算方法同k=1;而与其他边同时出现,则分两种形态,一种两边有一个交点,一种无交点。分类讨论即可。

  此时大约11:00。
  我去思忖T3,感觉很不可做——朴素暴力都要 O ( q n 2 ) ,你能用什么逆天的数据结构把它优化到 O ( q l o g 2 n )
  不过,这一波思索还是有所收获:考虑设构成容器的左木板为a,右木板为b。那么,设a的取值为sta[1..top],则若我们按照编号单调递增的顺序将每个木板压入此栈,横坐标也会单调递增,那么高度就必须单调递增。
  可以尝试举个反例:有某个i<j,且h[i]≥h[j],但i、j都可作a的取值。这种反例可行吗?如果i<j,则x[i]<x[j],说明之后我们计算a、b横坐标之差时,x[b]-x[i]>x[b]-x[j];而h[i]又≥h[j],那肯定是i更优,所以大可不必将j压入栈中。
  类似地,我们若按照编号单调递减的逆序将每个木板压入b的取值的栈,则高度必须单调递增。
  那么,对于每次询问,考虑 O ( n ) 求出a、b的取值的单调栈,然后 O ( n ) 枚举一个min(h[a],h[b]),在栈中二分出相应位置,计算一下即可。
  这样,时间复杂度是 O ( q + q u e r y n l o g 2 n ) ,其中query为询问数。预期能过前两个点。

  打完后,业已12:00了。还剩10minutes,我弃疗了,随便翻看T4,胡思乱想了一通,根本没时间打暴力,比赛便结束了。

  期望得分:40+30+20+0=90。感觉今天的题整体难度都提升了,木有签到题了。

  午,又在观腐。

  下午讲题依旧是13:00始。
  T1的话,真tmd是个Mobius反演!早知道就乱推一波式子了!!!(不过它的推法确实有点诡谲)详细TJ戳这里
  T2,我发现计算那个“其他点可选可不选的方案数”,直接用2的次幂就行了,而我还傻逼逼地用了组合数……
  T3的话,他提供的20points做法和我的不属。不过据他所述,我得到的结论应该是正确的。而100points做法竟然只用到了数组+链表!!!!!
  T4,感觉比较神奇——木有用到什么高级的算法,不过我没听懂。
  
  再次发成绩单了:20+30+0+0=50。怎么被吃了40points?!!我百思不得其解。不过,lyl大犇说复评也只是让他告诉你哪里错了而已,所以我并没有去复评。

结果

  总分210,距离rank70还差35points(不必管rank71),没能进GDSOI,感觉还是比较遗憾的。似乎zhj大犇去年,也就是初一的时候参赛,都进了GDSOI;虽说今年纪中初一、二全军覆没,zhj大犇也痿了。

反思

  1. 以平常心对待比赛,不卑不亢,不要因为Day1略占优势而放松,也不必因为考差了而沮丧;
  2. 早点睡觉,养足精神;
  3. 别总想切题,宜先打完会打的暴力,以得分为主;
  4. 要打打对拍,学以致用,以免再次出现Day2这种莫名其妙的被吃40points的情况。

猜你喜欢

转载自blog.csdn.net/qq_36551189/article/details/80152332