我今年高一,这是我第一年作为正选参加NOI。

去年NOI没写游记,结果前两天想要复盘NOI2019的时候发现只能回想起一些模糊的记忆了。为了防止明年再遇到这种情况(其实我更希望没有明年),就有了这篇游记。

也正是因为这个原因,本文将专注于考试本身,其他事情就不会怎么记录了。至于经历或目睹的其他事情,写出来估计也难有人有共鸣,所以干脆省略吧。

考前的情况

考前几周的模拟赛/其他比赛基本上都以各种原因挂掉了(很惨的那种),大部分时候是因为策略/考场行为上的重大失误,偶尔是因为智障没想出题。

总结了不少考场策略和注意事项,但不知道为啥总能花样翻新地犯错(偶尔也会旧错重犯)。考前两天终于意识到了最重要的问题:考场上不冷静,心理活动太丰富;然后针对这两点提出了一点改进方法。

笔试

考前一天晚上准备了一下,成功AK。

Day1

比赛之前

前一天晚上十一点总算完成了糊墙式的复习,早上爬起来之后又背了个快读板子,默写了一遍注意事项,就出发去考场了。

晚上十一点多一点入睡,早上四点多一点醒(然后就没再睡着)。看起来有点离谱是吧,但对我来说还行了……我反正已经习惯考前睡不着觉了qwq。

比赛过程

00.5h:T1的读题和思考。这段时间有点迷糊,不知道为什么注意力不太集中。过程中一度以为T1并非简单题,在30min终于会做后感觉自己是沙雕。想完之后仔细确认了做法的正确性。

0.5h~1h:T2 T3的读题和初步思考。T2很快想到是长链剖分或者线段树合并,T3想出了三种特殊性质分别的做法(其中性质A想的是难写的分块而不是莫队)。判断难度顺序是A->B->C。

1h~2h-:T1的代码和测试。测试时发现自己忘了判-1。自觉进度有点慢,所以没有对拍。

2h-~4h-:T2的思路细化、代码和简单测试。代码本身似乎并不难写,但写了两个有点隐蔽的bug出来,结果调小样例调了很久。本来预计3h出头时能弄完,结果弄到了接近4h。因为时间紧张,过了大样例之后就没对拍,甚至没顾得上瞅一眼大样例强度。

(考场上我的判断是:区分度主要集中在第三题,所以第三题需要拿到可观的分数才能够到队线。因为如此所以在做前两题时没有花时间去换稳定性。)

4h-~5h:肝T3。尝试了一两个思路后认为正解不可做,然后提出了性质A的莫队+BIT做法,接着发现能用四维莫队+BIT做一般情况。认为四维莫队性价比最高,剩下的时间都在写它。当时的判断是:写出来四维莫队,性质A的分就都有了(因为四维莫队全方面强于二维莫队),无性质的分也能拿不少。最后10min 又Rush了一个性质C,为了复用代码,写的是二维莫队+BIT。12:58终于把tears.cpp放进了提交文件夹里,惊险刺激。

后话

100+100+48=248,前两题顺利AC,T3丢掉了性质C和大部分性质A的分数(A是因为忘记针对二维莫队改块大小,C原因未知),但因为出题人卡不掉结果意外拿到了性质B的分数。

官宣rk50的分数是240,但这50个人中包括IOI2020集训队还有DE类选手。猜测今天实际的队线会在230左右。自己在考场上似乎把队线估高了一点。

感觉今天的考试过程中冒的风险还是太大了。明天需要更谨慎一些。

Day2

比赛之前

考前放弃学习。

这次是十一点不到入睡,三点半醒,然后就没再睡着。意外的是精神反而比昨天好。

比赛过程

0~0.5h+:T1的读题和思考。尝试分析连边的图的性质,但完全没有靠谱的想法,甚至想不到任何一个非平凡的做法。

0.5h+~1.5h-:T2 T3的读题和初步思考。T2看完感觉可能可做,推了一会儿性质就先丢掉了;T3看到弦图很开心(考前刚学过弦图),然而试了试自己了解的弦图性质,发现都不太派得上用场,冷静之后决定放弃。

到这时对难度有初步感觉了,判断是CTS级别的难度,A掉一题估计就稳了,三题部分分也有希望。但目前为止一个靠谱思路都没有,还是有点慌的。

虽然T2看起来更可做,但T1毕竟排在前面,还是相信一下组题人的良心吧。于是准备把剩下的时间大致平均地分给T1和T2。

1.5h-~2h+:这期间继续尝试了一些T1的思路,但都找到了反例。最后无奈决定把已经想出来的三个假做法合并取最优解。三个假做法分别是:

  • 把原材料random_shuffle后从前往后贪心选。卡时重复多次。
  • 钦定连边图(把菜肴看作原材料间的连边)为若干菊花的并,对它决策。(状压DP,\(O(3^n)\)复杂度)
  • 贪心,每次把当前的最小元素(指原材料)和最大元素匹配。

2h+~3h:实现了上述三个假做法,并进行了简单测试。有一点细节且代码比较长,但成功做到了几乎一遍写对。说“几乎”是因为测样例发现输出部分写错了。

此时感觉自己这场已经凉了,但还要挣扎挣扎。

3h~3.5h+:继续思考T2,兼顾部分分和正解。过程中觉得自己会正解了,吸取模拟赛教训仔细检查算法正确性,成功发现自己想题的时候把题意想歪了。不过仔细考虑一下,原来的做法似乎能魔改一下以适用于正确的题面。又花了一些时间继续确认正确性和想清楚细节,直到基本确信自己能把它写对为止。

3.5h+~4.5h:写T2。比较顺利,写完一遍过样例。

4.5h~5h:测了T2的极限数据,然后肉眼检查了一遍T1和T2的代码。保险起见开大了T2 trie树内存池的大小。未发现其他问题。

后话

45+100+0,没有挂分,T1得分超出了我的预期。

三天总分加上A队加分,最终排名似乎是rk26。

NOI2020游记的更多相关文章

  1. NOI2021 去不了记

    没错,由于某些 zszz 的原因,我是真的去不了了(指去不了 ZJ) Day -11 ~ -7 - 2021.7.12 - 2021.7.16 令人自闭的 ISIJ 终于结束了----From ycx ...

  2. NOI2020网上同步赛 游记

    Day1 预计得分:\(32pts\)(我裂开了--) T1 美食家 表示考试的时候想到了关于矩阵快速幂的想法,甚至连分段后怎么处理都想好了,但是没有想到拆点,还有不知道怎么处理重边(这个考虑是多余的 ...

  3. 开始是为了结束,结束是新的开始——NOI 2020 游记

    Day 0 报道日 晚上的时候我们的教练给我们做考前动员.给我们讲:NOI的五个小时需要认真的规划,不能被T1打乱节奏.他让我们思考明天的策略,把可能出问题的地方都想清楚. 结果后来,宿管给我测体温, ...

  4. 【20161203-20161208】清华集训2016滚粗记&&酱油记&&游记

    先挖坑(这个blog怎么变成游记专用了--) 已更完 #include <cstdio> using namespace std; int main(){ puts("转载请注明 ...

  5. 【20160722-20160728】NOI2016滚粗记&&酱油记&&游记

    先挖坑 #include <cstdio> using namespace std; int main(){ puts("转载请注明出处:http://www.cnblogs.c ...

  6. NOIp2016 游记

    DAY -2 不要问我为什么现在就开了一篇博客. 本来想起个NOIp2016爆零记或者NOIp2016退役记之类的,但是感觉现在不能乱立flag了.所以就叫游记算了. 前几场模拟赛崩了一场又一场,RP ...

  7. NOIP2016游记

    只是游记而已.流水账. Day0:忘了. Day1:看完T1,本以为T2一如既往很简单,结果看了半天完全没有思路.然后看了一眼T3,期望,NOIP什么时候要考期望了,于是接着看T2.一开始我推的限制条 ...

  8. CTSC2016&&APIO2016滚粗记&&酱油记&&游记<del>(持续更新)</del>

    挖一波坑 #include <cstdio> using namespace std; int main(){ puts("转载请注明出处:http://www.cnblogs. ...

  9. 游记——noip2016

    2016.11.18 (day 0) 呆在家. 悠闲地呆在家.. 明后天可能出现的错误: 1)没打freopen.打了ctime: 2)对拍程序忘记怎么写了...忘记随机化种子怎么写了: 3)不知道厕 ...

随机推荐

  1. 前端监控SDK开发分享

    目录 前言 收集哪些数据 性能 错误 辅助信息 小结 客户端SDK(探针)相关原理和API Web 微信小程序 编写测试用例 单元测试 流程测试 提供Web环境的方式 Mock Web API的方式 ...

  2. 最常用SQL joins:内连接(交集)、左外连接、右外连接、左连接、右连接、全连接(并集),全外连接

    1.内连接.两个表的公共部分用Inner join,Inner join是交集的部分. Select * from TableA A inner join TableB B on A.key=B.ke ...

  3. System.IO.IOException:“找不到资源“window1.xaml”。” 解决方法

    报错:找不到资源"window1.xaml 原因:在编译时使用的是en-US选项进行编译并生成了en-US为名的文件夹,里面包含了可本地化的内容:但是你的本地系统使用的是zh-CN,在你运行 ...

  4. 【Android笔记】Thread类中关于join()方法的源码分析

    1.join()方法的作用: 例如有一个线程对象为Thread1,在main()方法中调用Thread1.join()方法可使得当前线程(即主线程)阻塞,而执行Thread1线程. 2.源码分析(以上 ...

  5. PAT-1064(Complete Binary Search Tree)JAVA实现

    Complete Binary Search Tree PAT-1064 本次因为涉及到完全二叉排序树,所以可以使用数组的形式来存储二叉排序树 对输入序列排序后,得到的是中序遍历二叉排序树的序列.对这 ...

  6. 记一次Drone无法触发构建的问题

    问题 好巧不巧,当你晚上准备上线的时候,在下午临近下班的时候CI&CD工具出问题了,提交代码不能触发构建,不能上线了,Drone平台那边也下班了,正好CICD依赖的公司git仓库也出问题了(就 ...

  7. AtCoder Beginner Contest 187

    A Large Digits int n; int main() { IOS; int a, b, resa = 0, resb = 0; cin >> a >> b; whi ...

  8. [省选联考 2020 A/B 卷] 冰火战士

    一.题目 点此看题 二.解法 其实这道题也不是特别难吧 \(......\) 但树状数组上二分是我第一次见. 我们把冰人和火人都按温度排序,那么考虑一个分界线 \(x\) ,问题就是求冰数组 \(x\ ...

  9. 浅谈Java的反射的原理

    Java的编译过程 谈及反射,不得不先了解一下,java的整个编译过程,整体的java编译过程可以参考 之前的一篇 一个java文件被执行的历程 这里我们只针对 对象这一层级来讨论,一个java文件, ...

  10. 安装JDK步骤,配置环境变量

    DK是Java语言的软件开发工具包,主要用于移动设备.嵌入式设备上的java应用程序.JDK是整个java开发的核心,它包含了JAVA的运行环境(JVM+Java系统类库)和JAVA工具.所以今天教一 ...