这篇就主要说一下个人感悟吧,虽然不是金牌选手,但还是希望多多少少能对后来者提供些帮助

1. 预备

省选到 NOI 的准备,就当讲讲故事。

省选考下来好像不是很行,本来退役记都写了一半了,结果发现省队最后一名苟进去了 awa 随后就是抛开一切准备 NOI。省选联考固然难,但做过 NOI2020 的线上赛,也知道 NOI 和省选毕竟不是同一个等级的,做足了心理准备。

与其他竞赛强校联合训练是准备 NOI 的主要方式,也就是一起打比赛,分享试题。省选时两天一次测试,现在几乎每天都考,训练强度直接翻了倍。每天上午打比赛,下午晚上补题;题目难度要向 NOI 靠拢,补题的难度不言而喻,基本上一天也就耗在了补题上。再像以前那样写长篇大论的博客总结试题是不现实的,所幸自己一直保留着「刷题记录」这种东西,记录每道题的主要算法,再对这道题根据自己的收获给出一个价值(是否需要复习、重做,或者重温思路);实际上到训练后期这种记录就足够了。

知道进入省队的消息后没过多久就去北京集训,这是我第二次长时间外培。其实外培和平时的训练区别就是“有一群人和你一起考试”,的确人多一些更有考场的感觉。到了外地,作息时间可能有 1h 左右的调整,需要先适应;不过更重要的还是适应考试环境。实话实说,外培讲课的效果其实并不比线上视频好,人太多根本不方便提问;一些人的解法可能和 std 不同,值得一听,虽然大多数时候是半懂的状态,但是至少还是要在脑海中留下一个印象——这道题可以这样分析。

做比赛碰到的算法大多数是学过的,就当是复习。能写的题就写,其实也是复习一些模板(在之后敲模板题的时候有些算法就可以 skip 了)。

偶尔也会碰到没学过的算法,听评讲肯定是听不懂的,还好有 OI-wiki 以及其他博客。到 NOI 的阶段,发现有一整块知识缺失是不可能的,多数没见过的算法都是一小点;如果没有冲金牌的目标的话,这种算法就把比赛题补了就合适了,再拓展练习的话,一是大概率不会碰到,二是很难把握算法精髓,NOI 肯定不会考板子,即使碰到也不容易想到正解。

教练有时会让我们研究一些论文,同样的道理,不需要大规模练习。

2. 练习赛

本来想在前文就顺带说了的,但是看起来得单列一节。

练习赛不仅是做题,还要练策略。练习赛需要重视,但是毕竟不是正式比赛,可以拿来做实验( ̄︶ ̄),比如听说一种策略是「拼了命也要做出第一题」,可以试一试然后死得很惨。

练习赛是模拟正式赛,但有一说一,和 NOI 差别肯定很大。NOI 试题有一个共同点是测试点分得特别细,练习题就很难有很细的部分分,而且还绑点╰(‵□′)╯。考下来分数肯定会集群,所以练习赛比较考验某一个思路的突破,以及实现的精细。不管怎么练,始终记住正式比赛啥都不会写的时候「部分分+乱搞」yyds。

多校联训总共六十多场比赛,越到后期越难,如果状态不佳,连续几场考爆是常有的事。听到家长说「看你们这些竞赛生都已经考麻木了」,实际上只有外人会这样认为。最后十场练习赛连续爆炸,每次考完看到自己的分数,觉得「可能就这样了,无所谓了」;但是中午躺在床上脑子里就只剩「真的无所谓了吗?凭什么我学了这么久,凭什么我都冲进省队了,还是考得这么差?」;摔东西、砸墙、长跑……独自一人发泄一通,似乎又好了,告诉自己「明天一定要 200+,再拿一次 rank1」。自言自语在人群中不太好意思,但一个人的时候久不必要隐瞒了。每次自己从「期望后的失望」中回复过来的时候就会想起一首歌:

给我 点时间就好

让我 安静地坠落

请不要担心我

并不需要太久

然后装作

没发生过

——《难过 233 秒》

大概就是这样吧。

终于在最后一次练习赛时,整个人放开了,啥都不管放开了考,得到了自己满意的名次。

3. 临考

NOI 就跟个夏令营一样,任务安排特别宽松,给了选手特别特别多的时间。

NOI 临考的时候最烦的是「不知道要干什么」,但是必须要找到事干,个人觉得劳逸结合是比较好的选择。

考前不需要太压抑自己,尤其是到了宿舍过后,一个人一直复习往往会把寝室弄得特别紧张,所谓内卷(´Д`)。喜欢玩游戏就玩,喜欢打牌就打,喜欢唱歌就唱(不要扰民⊙﹏⊙∥),只是每次 NOI 都把体育馆给占了,打球之类的基本上不太可能,而且夏天比较热。(这次 CCF 报道厅把乒乓球馆占了(ノ`Д)ノ)

有句话说的好:「劳逸结合是不错,但也别放松过头」[doge] 适当地卷有助于保持自己的状态。我复习主要是看自己的博客,还有把刷题记录挨个看,主要复习思路。NOI 不太可能撞题,所以复习重点在「怎样找到这道题的切入点」或者一些实现细节。

另外住在寝室里有个好处……如果是一个比较活泼的寝室(o゜▽゜)o,室友可能会在 Ta 发现某个神奇算法/思路的时候发出惊叹 awa 虽然嘴上说着「NOI 要是考这个算法,我 ***」实际上很有可能一奶一个准_(:з)∠)_

4. 考试

考前啥都不想,唱首歌就上路 awa

不管 CCF 又出什么幺蛾子导致比赛延时,反正比赛都是 5h。开考后先通览题,只要没有去年 NOI2020 Day2T2 那种玩意,差不多十几分钟就能了解大概题意。此外注意数据规模。

然后不管哪道题比较有思路,反正按顺序做,不会做就写部分分。NOI 大概是按难度排序的,所以留给前面的题的时间还是得多些。T1 如果能想出来,思考+写代码 2h 对于一个银牌选手并不过分;如果没啥思路,顶多 1h 过后必须写代码,能写多少写多少;2h 没调试出来,先保存着放一放,换 T2。T2 的策略和 T1 差不多,只是思考时间可以缩短一些,一定要给 T3 一些时间,哪怕是写暴力也可能花费一些时间。

至于 T3,还是那句话,如果不是冲金牌,开局就看部分分。考前学会了一个看部分分的方法——分栏看。T3 的部分分往往是把每个测试数据的信息挨个列出来,表格长得离谱(。_。),但是可以看它每一列的特殊性,比如一些点的 \(n\) 很小,一些点的 \(k\) 很小,一些点有特殊性质……

写完 T3,如果 T1 没写出来,现在就可以打回马枪了(反正我 Day1 就这么干的)。调试的时候如果没有合适的大样例就写对拍吧!比干瞪眼强多了。

考试结束前 15min,代码一存,检查:

  1. 文件目录,文件名,文件输入输出;如果你不确定代码放的位置,可以问工作人员;

  2. 数据规模,包括数组的大小和数据类型(long long);

  3. 编译:O2 和 C++11 开和不开都要测一测,应该以后都会开 C++11 但还是要看清楚;编译完测文件大小,MLE 和 CE 一样惨;开所有你记得的编译警告,尽管网上说只开 -Wall 就够了,但是似乎有些东西比如 -Wconversion 就需要单独开;

    除了开了 O2 警告你 scanf/printf/freopen 的返回值没使用这种屑警告,其他警告都要重视,尤其是:

    • 隐式类型转换;
    • void 函数可能木有返回值;
    • 位运算的顺序;
    • 变量重名(养成好习惯( ̄▽ ̄)")。
  4. 用文件输入输出测样例,eg:

    cd qi
    g++ -o qi qi.cpp -std=c++11 -O2 -Wall -Wextra -Wconversion -Wshadow
    cp qi1.in qi.in
    ./qi
    diff qi.out qi1.ans -w
  5. 检查代码里是不是还输出了中间变量,建议用 fprintf(stderr, "")/cerr 输出中间结果,最后直接搜索 fprintf/cerr 删掉就行了;

  6. 删掉代码里所有 assert,尽管你觉得只要 assert 挂了就会错,但是如果加了 assert 就肯定没戏,删了过后可能会出奇迹o(* ̄︶ ̄*)o

5. 结语

作为一个 OIer 的学习生活已经结束了,也仅能以一个退役学长的身份和后来者交流了。

自己瞎编了六个字送给现役或有意参赛的人:『慎始,笃行,善终』。

「DIARY」NOI2021 小结的更多相关文章

  1. spring cloud 入门,看一个微服务框架的「五脏六腑」

    Spring Cloud 是一个基于 Spring Boot 实现的微服务框架,它包含了实现微服务架构所需的各种组件. 注:Spring Boot 简单理解就是简化 Spring 项目的搭建.配置.组 ...

  2. 从 Spring Cloud 看一个微服务框架的「五脏六腑」

    原文:https://webfe.kujiale.com/spring-could-heart/ Spring Cloud 是一个基于 Spring Boot 实现的微服务框架,它包含了实现微服务架构 ...

  3. 从 Spring Cloud 看一个微服务框架的「五脏六腑」(转)

    Spring Cloud 是一个基于 Spring Boot 实现的微服务框架,它包含了实现微服务架构所需的各种组件. 本文将从 Spring Cloud 出发,分两小节讲述微服务框架的「五脏六腑」: ...

  4. 「MoreThanJava」机器指令到汇编再到高级编程语言

    「MoreThanJava」 宣扬的是 「学习,不止 CODE」,本系列 Java 基础教程是自己在结合各方面的知识之后,对 Java 基础的一个总回顾,旨在 「帮助新朋友快速高质量的学习」. 当然 ...

  5. 「MoreThanJava」Java发展史及起航新世界

    「MoreThanJava」 宣扬的是 「学习,不止 CODE」,本系列 Java 基础教程是自己在结合各方面的知识之后,对 Java 基础的一个总回顾,旨在 「帮助新朋友快速高质量的学习」. 当然 ...

  6. Python后端日常操作之在Django中「强行」使用MVVM设计模式

    扫盲 首先带大家了解一下什么是MVVM模式: 什么是MVVM?MVVM是Model-View-ViewModel的缩写. MVVM是MVC的增强版,实质上和MVC没有本质区别,只是代码的位置变动而已 ...

  7. 「译」JUnit 5 系列:条件测试

    原文地址:http://blog.codefx.org/libraries/junit-5-conditions/ 原文日期:08, May, 2016 译文首发:Linesh 的博客:「译」JUni ...

  8. 「译」JUnit 5 系列:扩展模型(Extension Model)

    原文地址:http://blog.codefx.org/design/architecture/junit-5-extension-model/ 原文日期:11, Apr, 2016 译文首发:Lin ...

  9. JavaScript OOP 之「创建对象」

    工厂模式 工厂模式是软件工程领域一种广为人知的设计模式,这种模式抽象了创建具体对象的过程.工厂模式虽然解决了创建多个相似对象的问题,但却没有解决对象识别的问题. function createPers ...

  10. 「C++」理解智能指针

    维基百科上面对于「智能指针」是这样描述的: 智能指针(英语:Smart pointer)是一种抽象的数据类型.在程序设计中,它通常是经由类型模板(class template)来实做,借由模板(tem ...

随机推荐

  1. 11月29日内容总结——SQL注入问题、视图、触发器、事务、存储过程、函数、流程控制、索引、慢查询、数据库三大范式

    目录 一.SQL注入问题 SQL注入问题引入 SQL注入概念和解决方案 二.视图 三.触发器 定义 代码 1.触发器命名有一定的规律 2.临时修改SQL语句的结束符 四.事务 事务的四大特性(ACID ...

  2. DBSCAN学习笔记

    基本概念 核心点:若某个点的密度达到算法设定的阈值,即ε-邻域内点的数量(包括自己)不小于minPts,则该点为核心点. 边界点:在ε-邻域内点的数量小于minPts,但是落在核心点邻域内的点. 噪声 ...

  3. 822. 走方格(acwing)

    题目: 先讲变量 n:右下角的x值 m:右下角的y值 ans:答案(有几种可能) a数组:用来存储向下和向右的动作. x:所在的位置的x值 y:所在位置的y值 x1:下一步可以走到位置的x值 y1:下 ...

  4. CentOS安装mysql、MariaDB以及更改数据库存储路径

    注意:此方法只适用于新的机器或没有重要数据库表(可随意删除)的机器安装,如需升级版本参考下方链接!!! https://www.jianshu.com/p/955ff6065935 一.安装操作 1. ...

  5. C++_虚函数

    1.目的: 派生类继承自基类.使用指针或引用访问派生类对象时,指针或引用本身所指向的类型可以是基类而不是派生类.如果派生类覆盖了基类中的方法,通过上述指针或引用调用该方法时,可以有两种结果: 调用到基 ...

  6. 删除resource中的图片后编译报错

    同僚的一篇文章是:https://www.cnblogs.com/jljxxf/archive/2012/08/19/2646937.html, 详细介绍了C#的Resources,其中关于删除资源这 ...

  7. React Hooks的理解,React Hooks有哪些,解决了什么问题

    一.是什么 Hook 是 React 16.8 的新增特性.它可以让你在不编写 class 的情况下使用 state 以及其他的 React 特性 至于为什么引入hook,官方给出的动机是解决长时间使 ...

  8. Mac监控键盘输入并执行动作

    背景 电脑的安全是非常重要的,特别是里面的敏感数据,若是被有心之人利用,那后果不堪设想. 所以我们部门定下了一个规矩,谁离开工位要是不锁屏,就可以在部门群发送一个消息:我请大家吃鸡翅. oh,技术出身 ...

  9. CCRD_TOC_2008年第3期

    中信国健临床通讯 2008年第3期 目 录   银屑病和银屑病关节炎 1.        国际皮肤病专家呼吁重视生物制剂治疗银屑病 原文: http://pharmatimes.com/forums/ ...

  10. postgresql序列基本操作

    1.创建序列 CREATE SEQUENCE if not exists test_mergetable_id_seq INCREMENT 1 MINVALUE 1 MAXVALUE 99999999 ...