FOI 2019 游记
Day -3 and -2
打 FZYZ 的 NOIP-TG 模拟,发现自己弱得一匹。。。
Day 1
今天是一中的 chj2001 大佬讲数论。
然而有一个老师注意事项讲得太久,我看他的手指都一直在敲桌子
最后拖课了将近半小时
听课还好
下午测试,但是并不怎么样
开题,T1 调了一个多小时,结果没有调出来,就把输出样例搞了一下就交上去了
T2 看起来递推可以得部分分,但是我的程序只能过最弱智的部分分。。。
然后赛后讲评的时候,我们集体走错场地(包括老师)
这是老师 PPT 里的一句话:
这个样例,无疑是善良的出题人无私的馈赠。大量精心构造的 n ≤ 100, m ≤ 200 的测试数据,涵盖了测试点中所有出现性质的组合。
你可以利用这个测试点,对自己的程序进行全面的检查。足量的数据组数、不大的数据范围和多种多样的数据类型,能让程序中的错误无处遁形。
出题人相信,这个美妙的样例,可以给拼搏于 AC 这道题的逐梦之路上的你,提供一个有力的援助。
赛后成绩只有 10+10+0=20,RK 71,还是太弱了
Day 2
今天是附中的 ditoly 大佬讲数结。
课貌似还是听得懂的,最难的莫非 zkw 线段树。
ditoly:今天下午的题目很简单;我:……
中午 11:30 就到机房了。
然后花半小时打了 luogu P3372 的线段树、树状数组、分块的做法,感觉还可以。
又花了一些时间学了 Trie.
13:30 准时开题。
T1 我本来想用 std::set 打暴力,然而我的迭代器炸了,只能用数组勉强打一个。
T2 本来暴力是 $O(n^3*m)$,20 分,结果我嫌这个暴力难看就想到了前缀和(?
然后复杂度就降为 $O(n^2*m)$,期望得分变成 40。
T3 点开,枚举了前几种情况,然后在 OEIS 里面找到了一串数列,但是感觉不对,就没有写上去。
然后我就写了一个东西:
printf("%d\n", 1ll * rand() * rand() % 998244353);
虽然好像基本用不到
17:00,比赛结束,我 0 + 50 + ?= 50 + ?,RK 61
T3 我没有交,反正也应该没有分。。。
关键是 T1 怎么炸了
听 ditoly 讲评,原来是每一个数据都很毒瘤,然后 k=0 和 k>n 的情况我都没有讨论。
然后 T2 可以通过排除不必要的情况骗暴力到 90分,最后十分要前缀和套入线段树。
接下来 T3,没想到 OEIS 的序列是对的 ?!
感觉今天又丢了很多不该丢的分。
感觉今天考的更偏向数学。
Day 3
今天是一位来自长乐一中的神犇讲搜索的优化。
有剪枝、双向搜索、迭代加深、A* 等。
按照惯例,今天下午肯定不测试搜索。
果然,T1 看着是数学,先打了 50 分的子任务。
然后 T2 又可以用前缀和暴力。
T3 因为感觉时间不够就先不写了
因为今天 OJ 不评测,改成其它地方了,所以成绩 21:30 才出来。
然而我才 0+30+0=0,RK 41
大家都在议论,听说是 T1 没有子问题,数据出锅了,没有造出那 50% 的数据。。。
所以本来能 80 分的。
所以今天考的是数据结构。
小结
既然昨天考数学,今天考数结,那明天一定考搜索。
好好复习搜索吧。
Day 4
是 FallDream 大佬讲课,三种 DP。
下午开题:
T1,然后看了一下二十分钟写了个暴力就跑了。
T2,貌似有点不可做,整道题只有 3 个 Subtack,也跳了过去;
T3,这不是暴力就能拿个 50 分吗?
然后写了一两个小时,检查了特殊结果以及样例过了,就交了上去。
最后我憋出来了一个 20 分的 T2 暴力。
结果成绩出来只有 50+20+0=70,我的 T3 RE 掉了。。。
只有 RK 90。
Day 5
今天是 FZYZ 的 SteAunk 神犇讲图论的一些东西。
貌似 2-SAT 等算法能听得懂了
然后我旁边有一个人调分块做超级线段树模板,调了一个半小时。。。
下午网断了,然后也不能划水了
开题:
T1:这是图论题吗?一个哈希就过了!
然后我由于太懒就写了一个 std::map
20 分钟写完。
T2: 30 分的数据不是 01 背包吗?
然后我就乱写了一通,然后还多写了几个特殊的测试点。
两题暴力写完才过了 45 分钟。
T3:又可以暴力!
然后我又搞了大约半小时就写完第三题的暴力了。
又花了半小时写特殊子任务。
整个写距离比赛结束还有 75 分钟。
然后我就多写了很多可以骗得来的分。
感觉这三题和图论没有什么关系
事实证明,确实没有什么关系
预计得分:100 + 30 + 40 = 170
实际得分:100 + 50 + 24 = 174,RK 39.
我 T2 怎么骗来了那么多分。。。
T3 的 N=2 的时候写挂了。
Day 6
今天是一位去福州大学的老师讲网络流。
还没有下课时间,后面我真的想睡觉。
下午上机,就打了一个暴力
然后成绩出来我的暴力都被卡了。。。
但是大家的分数是真的低,30 分都能排在 RK 22 了。
Day 7
今天是来自南京大学的大佬讲计算几何。
感觉比网络流好多了。
然后听老师说,今天只有一道题是计算几何的。。。
下午机试。
T1:应该就是计算几何了,先放一边。
T2:一开始想到了 20 分,但是看到时间限制 5000ms 就知道不简单。
于是我就想到了一个 $O(n^2)$,常数为 1/2 的做法。
数据范围:$N ≤ 40000$;老师还通知今天有 O2 优化!
于是我就抱着能卡过去的想法写了八十分的代码。
T3:Subtack 1:这不是模拟吗?写了,30 points , get.
然后通过各种打表等方式都不知道怎么优化。
所以就放弃了,开始向 T1 进攻。
T1:数据范围那么小,小到连状压的范围都比不过,看了是个搜索。
于是我就写了一个 DFS,加计算几何的方式判断,花了三四十分钟。
但是答案是错的。
然后我就打印了遍历顺序,发现了一个容易忽略的东西:
若两条线段的其中一个顶点重合,也算是相交。
所以我就特判了一下,提前写了特殊的情况。
在离比赛结束还有 30 分钟的时间时,我 T1 调完了,耗时 90 分钟。
晚上出成绩,我 100+80+30=210,RK 5.
应该是考得最好的一次了。
Day 8
今天讲 NOIP 历年真题。
结果我能口胡解法的不超过三分之一……
下午考的是什么鬼,出题人难道有追番???
然后 T1 只会打一个 DFS,T2 打一个遍历,T3看都看不懂。
比赛快结束了发现 T1 不是暴力的部分要写高精度。。。
T1 讲评摘自老师原话:
如果不高精度,就全是暴力分了,而且高精度用 5 分钟调一下就行了
分数:30 + 0 + 0 = 30,RK ??
然后滚回去准备结业考试了。。。
Day 9
我是第二个到机房的。
然后监考老师在我刚打开网页的时候把网络关了。。。
八点准时开题:
T1,一看就是最小生成树,先花快半小时 $\text{Kruskal}$ 暴力跑一遍,“60” 分到手。
T2,DFS 20 分?花了 20 分钟敲。
T3:
基础暴力是 25 分,$O(n^3*T)$
然后想了 10 分钟,写了一个差分 + 前缀和,打了 $O(n^2*T)$ 的 40 分暴力。
时间:10:20
回头看 T1,发现有些不对劲:
$\text{Kruskal}$ 最慢是 m log m,这题 60 分 m 是 $2.5*10^7$,时间限制是 1s。。。
然后赶快改成了 $\text{Prim}$。
已经十一点多了
然后脑子抽了,T1 竟然想不到正解
然后就在颓废了。
下午分数出来,我 60+10+35 = 105,RK 50,鬼知道我后面两题怎么都少了一个点……
有一个初一大佬 RK 8.
赛后我自己竟然想出了 T1 满分做法,只要缩边,这个图只会有 2*n 条边,n ≤ 10^5,$\text{Kruskal}$ 足够跑过去了。