GDOI2018 游记

About Me

lhy,初一蒟蒻选手以及GDOI2018酱油选手。

Day 0

中午十二点多就早早地到了学校,在机房整理了下博客。一点多时上车,前往中山一中(坐在yhf大佬前面哦)。

GDOI之前停课集训了两个星期,结识了若干大佬,学到一些玄学算法,被各路大佬虐完之后立马就滚去GDOI,心中已经做好了写八题暴力不进soi的心里准备,因为感觉自己 真 的 很 弱

好吧,其实我心中还是有点侥幸心理的,也许这次能上个200分什么的,呵呵。

经过一路颠簸之后,我们终于到了酒店。这一次lhl很快就分配好了房间,简直火速。我和fmj被分在一起住。酒店的房间还是很大很不错滴……

下午五点左右,我们一行人前往中山一中蹭晚饭。经过一番仔细的比较之后,还是觉得广州二中的伙食比较好,嗯......

蹭完饭后,和各位大佬去考场踩点。我和ywq没费多大劲就找到了,而yhf率领的队伍却因为“搜索的遍历顺序存在一些问题”找了大概二十分钟(其实他们上二楼后左转就能找到了,但他们却把整栋楼都找了一遍)

晚上在酒店看电视看到很晚(前晚睡太多了)

不知不觉中,一天就这么过去了。

Day 1

早上六点二十多分,简单梳洗后到楼下吃早餐。

这家酒店的早餐真是好啊,有煎培根、煎香肠等等,还是自助的。和lah,czy,fmj等人吃玩这顿“极其油腻”的早餐后便出发去一中。

考试的开始时间从八点推迟到了八点半,但对我并没有多大影响。很快,监考老师说出了解压密码:tiandihe_naiganyujunjue!66。原谅我语文不好看不懂。紧接着,我打开了试题……

T1:农场

题目大意:给出若干个数,求这些数最多能被平均地分成连续的多少段。数的个数<=1000000,1<=每一个数<=10,所有数的总和<=1000000。

签到题?似乎可以枚举答案。先前缀和一遍,然后O(n)分段,看是否可以分成相等的若干段,从大到小枚举,一但符合条件就输出即可。乍一看,貌似是O(n^2)的算法,但仔细想一想,其实可以在分段之前先判断一下所有数的总和mod当前枚举的段数是否为零,如果不为零就肯定分不了,跳过,否则就开始分。这样时间复杂度就降到了O(sqrt(n)*n),再加上一些玄学优化,然而还是TLE。然后我想了想在分段时是否可以运用二分查找,结果脑子抽了的我算错了时间复杂度,以为这样会比纯暴力还慢,其实是O(nlogn)。于是我就没有把二分加上,只用了一些奇怪的优化。差不多一小时搞定这道题。

T2:密码锁

题目大意:给出n个不大于m的数,每次操作可以将一个连续区间中的数同时加一或减一,如果一个数在一次操作后小于0,则令它等于m-1;反之,如果一个数在一次操作后等于m,则令它等于0。求最少要操作多少次才能使所有数均等于0。数据范围记不太清了,n和m好像都是10^5级别或10^6级别的。

看到这道题,首先条件反射,想到了区间dp,推了一会儿,推爆了。又想了一会儿,没想到好的做法,果断跳过看T3。

T3:涛涛摘苹果

题目大意:有一颗有根树,每一个节点都有一个权值。每过一个单位时间,根节点的权值会清空,然后所有节点的权值都会转移到它的父节点那里。比如说这棵树:

(节点上的数字表示这一个节点的权值)

一个单位时间后,它会变成这个样子: 

接下来有若干条指令,可以分为两类:

1、在第t个单位时间时,给某个节点的权值加上w。

2、询问在第t个单位时间时,某个节点以及它所有子节点的权值总和是多少。

对于每一个询问,输出一个值表示答案。

节点数和指令数好像都是10^6级别的(数据范围记不清了)。

这道题有50%的数据点都是具有特殊性质的,比如说有10%的数据树是退化成一条链的,还有一些点是只有询问指令的,等等,还有10%的小数据。当时我就想着“面向数据编程”,对每一种特殊情况都搞一下,于是我就马上开打了。我先打完了10%的暴力,直接O(n)处理每条指令,轻松过样例,然后又转向数是链的情况。对于树是链的情况,我的想法是用一个队列去模拟,打完发现并没有比暴力快多少,呵呵。保险起见,我还是把这种特殊情况删掉了。码了我差不多两个小时吧。其实我想到了只有询问指令的那些数据的一点点思路,但由于时间真的不多了,我就没再继续想下去,拿好暴力分就行了。

折回来看T2,还是没想到什么好的解法,便直接打了n=4的爆搜,以及m=2时的特殊情况。显然,m=2时的答案即为n个数中有多少段连续的1。因为数据范围貌似并没有明确指出有m=2的情况,所以我也不能确定是否可以水多点分。写了三十多分钟(太久没写爆搜,写这题时写爆了好几次),奔向T4。

T4:小学生图论题

题目大意:有一个n个点有向图,每两个点之间都恰好有一条边相连,现在已知m条简单路径,求图中强联通分量的期望个数,然后要取一个很奇怪的mod。数据范围完全忘了,好像比较大吧……

“XX学生XX题”系列 & 不可做的期望题。一开始我想了想m=0时的情况,但并没有什么用。随便输出个数,走人。

期望得分:80+20+10+0=110

中午又去一中蹭饭,回酒店的路上和lah谈笑风生。在酒店看了会电视。

下午评讲:

T1:前缀和+枚举所有数总和的约数乱搞,如果这一个约数的一倍、两倍、三倍等等都在前缀和中出现,那么显然这一种解是可行的。时间复杂度≈O(n)。

T2:差分+贪心乱搞,似懂非懂。值得一提的是,出题人给了10分m=2的数据,嗯,不错……

T3:奇怪的数据结构,不懂。

T4:仍然是不懂的期望题。

四十分钟讲完,成绩单马上发下来了(这次的打印机不错哦)。

我怀着期待的心情,看到了成绩单,心里顿时凉了。实际得分:50+15+10+0=75。

T1不知道为什么WA了5个点,只得了五十分,可能是我写的某个玄学优化存在漏洞。T2那20分的暴力分我只拿到了5分,很有可能是因为我直接写了dfs,而不是bfs或记忆化搜索。当时我还天真地以为这么小的数据dfs肯定能水过(其实我写过记搜,但写挂了,这使我误以为这题用不了记搜,于是直接写了爆搜,呵呵),结果白白挂掉了15分,还好有10分m=2的数据补了回来。T3倒是意料之中的。T4果然爆零。

lah也爆炸了,他T1WA了8个点,只拿了20分,总分50。一向很大佬的lah竟然爆了,这是我没有想到的。

fmj90分,大佬。

czy85分,大佬。

初二初三几个100+,大佬。

我和lah两个闷闷不乐地去复测,czy因为T1最后两个点发生玄学错误也陪我们一起去了。此时我心中还怀着最后一丝的侥幸心理,也许评测机突然死机了什么的。

闷热的下午,等了一两个小时,终于轮到我们了。lah重测之后发现他的T1一个if写炸了,也没有再说什么。我重测之后还是一样的分数,T1某个优化可能写错了,T2那20分的数据用爆搜是水不到的(lah用记忆化搜索水到了,大佬)。czy重测之后发现数组开小了……

怎么说,还是有点遗憾吧。但我心情也没有很坏,毕竟我还是初一,连NOIp提高组都没参加过,这一次只是过来见世面的。Day2加油吧!

晚上回酒店,照样很晚才睡。

Day 2

 早六点多起床,又跑到楼下饭堂吃了一顿“极其油腻”的早餐。不同的是,自助餐改成了围餐,但还是吃一样的菜。昨天算了一下分数,今天至少要160分才有希望进day3,感觉有点悬。

吃完早餐之后很快就走到了一中,进了机房。这一次比赛的开始时间只推迟了10分钟,开心。

不久,解压密码就公布了:easy?GDKOI2019_jian!。看来昨天的题目被一众大佬喷得不轻。

T1:谈笑风生

题目大意:给出一张无向图,每一个点有一个值Wi。对于两个点,判断1与1..Wj中的每个数是否互质,判断2与1..Wj中的每个数是否互质,判断3与1..Wj中的每个数是否互质……最后判断Wi与1..Wj中的每个数是否互质。若互质,则它们之间的边的边权就加上这一对数的和。现在可以将每条边的边权都可以减少一个值K,求K最小为多少时才能在走过的总距离不超过T的情况下从节点1走到节点n,并输出在K最小的情况下从节点1走到节点n的最短路径的长度。Wi<=10^9,n,m<=10^5或10^6(记不清了)。

这道题求出边权之后不就是裸的最短路+二分答案吗?当时思想太僵化了,竟然没想到用gcd来判互质,硬是打了个分解质因数来盼!都想扇自己一巴掌了。结果

猜你喜欢

转载自www.cnblogs.com/wozaixuexi/p/8969750.html