Qingyu的博客

博客

OI 赛制比赛 emergency kit(2024 Winter Edition)

2024-02-28 14:20:38 By Qingyu

Useful Commands

Set memory limit: ulimit -v "${memory}"

务必使用题目规定的空间限制进行测试。该命令执行后 shell 内的程序一旦超出此内存限制便会被杀死。(教训:NOI 2022)

不要在同一个 shell 窗口内多次使用 ulimit -v。(事实上,可以多次使用 ulimit -v 来让新的空间限制变得更小,但变得更大会发生错误。)(教训:花花 in 2023 年广东省重点中学信息学邀请赛 (GDKOI 2023) 提高组 第一试)

Set stack limit: ulimit -s "${stack_size}"

不要设置为 unlimited,防止由于栈空间溢出导致系统崩溃。(教训:有很多。)

测量时间:time ./a < a.in

获取详细信息:/usr/bin/time -v ./a < a.in

Locate Overflows/Undefined Behaviors

使用 fsanitize:

  • g++ a.cpp -o a -fsanitize=address -O2
  • g++ a.cpp -o a -fsanitize=undefined -O2

推荐在任意时候都是用 fsanitize 编译你的程序测试样例,即使其返回了正确的输出。(教训:花花 in 1116 NOIP 模拟赛)

务必记得最终使用不含任何 fsanitize 选项的编译命令测试程序,以防止由于开启 fsanitize 造成的行为不一致。(教训:陈翰飞 in NOI 2021)

开启 fsanitize 后程序效率将会有所损失,在测速时请注意这一点。

Overflows of STL Containers

使用 -D_GLIBCXX_DEBUG 编译选项可以开启 STL 的 debug mode。

在这种模式下,会进行一些 STL 相关的检查,用于帮助定位 bug。

credits to 核仁 在 NOI2022 告诉我。

Other useful compilation flags

使用 -g-O0。credits to 日语酱。

使用 -Wall, -Wextra-Wshadow

The week before the contest

不要学习新的算法。

不要修改你平日养成的习惯(码风?编辑器?)

可以考虑编写一些模板(https://qoj.ac/contest/1536 )。几个 Common 的问题:

  1. 几个 tarjan 算法,会写吗(@alpha)
  2. 会树 Hash 吗(NOI 2022 P4)
  3. 会写 Z-Algorithm 和 manacher 吗?一遍写的对 SAM 吗?
  4. 会写 Pollard-Rho 吗?

可以考虑去回顾以前做过的题,或者随机看点课件。

应该去调整你的作息,考前一周你不应该在 00:00 后还不睡觉,不要在 01:00 后还不睡觉。失眠和焦虑是正常的现象,但你仍然应该去调整你的作息。

可以去和你想要说话的人聊天、说话,可以去想你喜欢的人,可以做一些你想要做的事情,但不要让你的心情过于激动。

不应该去在这个时间点思考比赛失利会怎样,不要在比赛前自暴自弃。

The Night before the contest

如果存在,你应该参加试机活动。不要错过任何可以适应考场设备的机会。

不要在这一天食用你不经常食用的食品。

应该尽早入眠,但如果你失眠,不要过于焦虑。一晚上的失眠通常不会显著影响你第二天上午的精力,just relax。

Contest Strategy?

Warning!:(2024 Feb 29 更新)由于帮助大家训练的时间比较短,我暂时不了解大家比赛时的策略。以下策略是我基于花花(黄洛天;Luotian Huang;https://oier.baoshuo.dev/oier/59311 )在参加统一省选 2023 与 NOI 2023 制定的策略。由于每个人的比赛策略与个人便好有所不同,因此本章节仅供参考。如果我所描述的建议与你日常训练与以往比赛的习惯不同,请不要显著修改你习以为常的比赛策略。大多数人类无法在很短的时间内适应一个新的赛时策略,请注意这一点。

  1. 必须阅读所有的题目。
  2. 应该在除极特殊的情况(NOI 2022 P3)外为每个题编写代码。
  3. 应该在每个题上投入不小于 20 分钟的思考时间,包括各档部分分。
  4. 应该在编写你认为会消耗你超过 30 分钟时间的代码前整理你的做法,并花费一定的时间验证正确性。
  5. 不应该在有其他事情可做时编写你认为会消耗你超过 90 分钟时间的代码。
  6. 不要编写你认为会消耗你超过 150 分钟时间的代码。
  7. 不应该在任何一道题目上花费超过 150 分钟,不要在任何一道题目上花费超过 210 分钟。
  8. 不要在比赛结束前 15 分钟内编写任何新的代码。
  9. 不要在比赛结束前 5 分钟内修改任何代码。
  10. 必须在距离比赛结束 15 分钟时,首先备份你的代码,然后检查所有题目子文件夹的名称,使用题面规定的编译选项编译测试所有代码,并测试所有的附加样例文件。
    • 如果你会编写 Shell 脚本,你可以编写一个简单的脚本来复制样例为题目规定的输入文件名,并使用你的程序的输出文件与 answer 做比较。
    • 2023.07 更新:有 self eval?省选有吗?
  11. 必须使用上述命令检查你的代码,必须进行空间限制的检查。
  12. 不应该在比赛时编写你从未编写过的算法。
  13. 不要在比赛时编写任何你没有信心能够完成的算法。不要依赖于奇迹发生。
  14. 如果你发现你编写某份代码所消耗的时间超过了你所预期的时间,你应该重新评估并考虑是否仍可继续完成。

Others

  1. 在第一场比赛考完后,你不要去打探其他人的结果。如果比赛在当日需要处理申诉,在公示后检查自己当日的提交文件。否则,不要思考任何第一场比赛的结果(NOI 2022)。
  2. 应该做好做不出当天比赛的第二道试题(NOI 2022)、甚至第一道试题(ZJOI 2022 Day 2)的心理准备。
  3. 应该做好你需要拿到当天比赛几乎满分的心理准备(NOI 2014,NOI 2015,NOI 2021)。
  4. 在有充足的时间时,你不应该放弃任何可以获得的部分分,哪怕它只有很少的分数(NOI 2022)。
  5. 在比赛前,你不应该思考其他人,包括你所认识或熟悉的选手的发挥,不要揣摩 XXX 能不能过这个题,不要揣摩做不出这道题目该怎么办。考场不是给你写回忆录的地方,请尊重你在漫长的训练中换来参加考试的机会。

评论

PubabaOnO
各位男性朋友,你们好! 男性的考试经验和考试技巧是不可能与生俱来的,它是需要一段时间的摸索和练习才能掌握的,无论你的观察能力是如何的健♂壮,你没有学会考试技巧,在省选考试相关题目中就会紧张,就会不知所措,就会被水淹没;而你学会了考试技巧,在省选考试相关题目中你就能轻松自如,如鱼得水。 下面,我们详细介绍关于男性掌握增加考试分数的技巧必需具备的几个条件。
  • 2024-02-29 15:47:35
  • Reply
QOJ114514ancestor
没有提到编译选项里写 -std=c++14,差评。
  • 2024-03-05 17:56:26
  • Reply
peimuda
”务必记得最终使用不含任何 fsanitize 选项的编译命令测试程序,以防止由于开启 fsanitize 造成的行为不一致。(教训:陈翰飞 in NOI 2021)” 能介绍一下具体情况吗?
  • 2024-10-26 09:39:37
  • Reply
bilibilitdasc
似乎还需要 -Wconversion。
  • 2024-10-26 12:03:30
  • Reply
chen_zhe_
一遍写的对 SAM 吗?一遍写的对 SAM 吗?一遍写的对 SAM 吗?
  • 2024-05-31 15:39:24
  • Reply

发表评论

可以用@mike来提到mike这个用户,mike会被高亮显示。如果你真的想打“@”这个字符,请用“@@”。