GDOI 2026 翻盘记

· · 生活·游记

超绝大翻盘。

11.29

NOIP。

遥远的过去,已经记不清了。

大战 sale 3 小时,拼尽全力获得 20 分和三四个假做法。

出考场预估 208,实际得分 217。疑似 T3, T4 暴力各多跑过去一个点。

据说省队线 300 左右。哥们破防了,游记都没写。目前不知道怎么进队。

2.5-2.9 @ 青岛

猜猜为啥是到 2.9 结束

3.6

上午前往中山。车程 1.5h,路上打 Exponential Idle (EI)。

到达南朗希尔顿酒店,距离考场约 8km(考场附近过于荒凉,我还是希望住一个好一点的酒店 w)

准考证 GD-067。得翻 50 个人才能进队啊。

下午是试机。鼠标滚轮出锅,联系志愿者更换了鼠标。机器有 16GB 内存,运行虚拟机没有卡顿,决定明后天在 NOI Linux 中打完全程的比赛。为啥?因为我去年省选 CE 了!

这里向大家种草我的比赛机器配置:把考生目录(形如 D:/GD-xxx/)设置为虚拟机的共享文件夹,这样可以无缝的在虚拟机里写题,比赛结束时无需额外的拷贝操作,也不会因为机器故障导致的虚拟机状态丢失造成代码丢失!(一般考生目录是不重启还原的,如果还原了……RIP。)

::::info[关于 makefile 的内容。写太长了,折叠一下。]

虽然每个人有每个人的习惯,但是我还是想写一下 w

推荐使用 makefile 编译!

比如说,题目的目录是 ~/night,我们写好了 night.cpp

此时,我们新建一个 makefile 文件,内容写入 all: night。含义为:“所有需要制作的目标有:night”。

接下来,执行 make 指令。make 会搜索到我们的 night.cpp,从而执行 g++ night.cpp -o night

我习惯做一个 alias m=make,将 m 设为 make 的别名,进一步缩短编译指令。

如果你需要编译多个文件,可以在 all: 后面依次书写需要得到的可执行文件名。

在终端中执行 export CPPFLAGS='-std=c++14' 或类似指令修改编译参数。这行命令的含义为:设定变量 CPPFLAGS 的值为指定的字符串。

你还可以把这行 export 追加到 ~/.bashrc 尾部以在每次打开终端时自动执行。

如果你想要临时修改,也可以在 makefile 内部更改 CPPFLAGS 变量。例如:

CPPFLAGS += -fsanitize=address -g # 添加 sanitizer
CPPFLAGS = -std=c++14 -static -DCIALLO # 等于号也可以用!

这个时候,如果你执行 make,会看到 CPPFLAGS 被加入了编译指令!

你可以直接执行 make night 来临时编译 night.cpp 而无需更改 makefile 文件。

make 只会在可执行文件的修改时间早于源文件时编译,这个是不会检查 CPPFLAGS 或者 makefile 的修改时间的,你可以通过 touch night.cpp 或者 make -B 的方式强制 make 编译。

make 也是可以进行联合编译的。比如,perm 一题,可以这样书写 makefile

all: perm # 其实这行可以不写。只有多于一个文件需要编译的时候必须写 all。
perm: perm.cpp grader.cpp

其含义为:需要制作 permperm 需要由 perm.cppgen.cpp 两个文件编译。

如果特殊情况出现,make 无法自动推导编译指令,还有最后的保底:自己指定编译指令!

all: perm
perm: perm.cpp grader.cpp
    g++ -o perm perm.cpp grader.cpp -std=c++14 -O2 -Wall # 自定义

::::

试了 20min 就跑了。中山纪中是教练的母校,教练于是成为了导游,带着校队参观校园。可惜许多曾经教练能进去的地方已经进不去了 www。

见到了许久未见的 ymh。交谈甚欢。

晚上压力作祟,我进食了大量零食。尝试在酒店唱歌,发现肚子被填满了音色不好听。乐。

3.7

Day 1。

吸取曾经的教训,我再也不喝咖啡了。

路上继续唱歌以缓解焦虑。

8:27 公布密码。为了避免不必要的问题,我决定在这三分钟完成虚拟机的配置而不是解压缩。

思考 T1。写出立方状态的 DP。意识到状态与节点高度有关,将长剖加入 idea list。写出平方状态,立方转移的 DP。想到回撤背包。分析了一圈回撤的复杂度发现带个长剖就平方了。开写!

一个小时通过 T1。阅读 T2, T3。

读完感觉两个题都不可做。但想了一会 T2 发现会了一个 n\times \mathit{ans}\times k^2 的东西,又发现可以 bitset 优化。认定此做法非常有性价比,开始写。

写完了,果然过不去大样例。预期 75

感觉此题数据极其难造,应该卡不满,开始疯狂剪枝。最后大样例跑了 1s,认为应该差不多了。预期 [75,100]

此时剩余 2.5h,看看 T3。

手玩了一会,发现应该倒过来考虑。从 m=2 获得启发,推出了一个看起来很有道理但是一车细节的玩意。但是这东西如果写出来能获得 50 多分,决定拼一拼。但是,果不其然,这份暴力写了 1.5h,通过了小样例,大样例挂完了。转而写 simple 一些的分。最后在比赛结束前拼完了 2^n 搜索,m=1m=2 的 Yes/No 判定,m=2 加 A 性质的构造。测了一下,发现原来那份暴力好像正确判定了 B 性质大样例的 Yes/No,死马当活马医,也拼上去了。我的估分是 [12,28],因为剩下的 16 分没有样例支持,我也来不及写拍子了。

出考场,100+[75,100]+[12,28]=[187,228]

我、drc、ymh 兴奋地讨论着题目走出了校门,我开始寻找家长准备去吃饭,他们才想起来需要前往饭堂 w。

下午、晚上都窝在床上。今天唱歌好听一些了。

3.8

Day 2。

依旧路上唱歌。

依旧配置虚拟机起手。

开题,发现两个交互。喵?

做 T1,思考了一会发现只许前后缀的 mex,获得 2n-2

想到了二分 0 的位置,获得 n+\log n+\varepsilon

发现 n+\varepsilon。写。过程中精细实现把 \varepsilon 卡到了 0。40min 结束。

看了眼 T3,感觉这个集合的序比较克苏鲁,决定先做 T2。

推了一会,决定把所有 k-团的异或线性基大小拉出来打个表。对着表观察,成功推出答案的数值。

因为线性基只有那么大,p=n(n-1)/2 应该不难。感觉稳了。

发现了如何 n\leftarrow n-1 直到 n=k+2

此时只剩下 n(n-1)/2 个可能的团。构出来这里此题就结束了。冲刺!

构了一个小时。没构出来。放弃了(

写了所有情况的 reportn\le 70 的暴力线性基构造,又拼了个 k=3。预期得分 55。呜呜。

剩下一个半小时左右,开始研究 T3。

手玩了一会,发现可以用类似 dijkstra 的方式求出所有集合的序关系。然后拼上菊花拼上 r=1 总共 44 分。

写完了,还剩 40 分钟。回 T2 挣扎了一会,没挣扎出来。

发现今天手特别酸。回想了一下,是我 T2 和 T3 一直在拼包,写了巨量的代码导致的(

出考场。期望得分 100+55+44=199

ymh 好像炸了,抱抱。ou 和 drc 都做出了 T2。

3.12

出分。

rk14。 噫!好!我中了! 噫!好!我中了! 噫!好!我中了! 噫!好!我中了! 噫!好!我中了! drc 断档领先,成为 GD 队长。ou 藏分哥,A2。我,ymh 都进了。加上一个女生赛名额,华南师大附中今年 5 个省队,历史最多。 青岛见!