NOIP/CSP-S 考前注意事项

实际操作与代码注意事项

基本内容

  • 可以使用 #include <bits/stdc++.h>!!!从来都是可以的!!!不需要背诵一大串头文件,更不要从本地的库里去复制一大串头文件(有的头文件可能评测环境下没有)。

  • 代码保存在哪,是否需要建文件夹之类的,以考场上的 README.pdf 为准。根据往年经验,江苏是不需要建子文件夹的,把四个 .cpp 文件放在根目录下即可。

  • 文件输入输出!!!具体来说就是:

freopen("problemname.in", "r", stdin);
freopen("problemname.out", "w", stdout);

​ 其中 problemname 是题面指定的文件名,每道题不一样。

  • 测大样例时注意不要覆盖原本的 .ans 文件。可以把所有大样例提前复制一份,以防这种情况的发生。
  • 不要用下划线开头的函数,如 __gcd__builtin_popcount。自己定义的除外。
  • 变量名避免完整的单词(hash, pipe, time, next),以及 x0, x1, y0, y1。如果要使用,可以简写(如 nxt),加前缀(如 mytime, _time),或者 \(\text{define}\) 掉(如 #define pipe guanzi)。
  • 不要忘记删调试语句。
  • for 循环两层循环尽量避免变量名重复。否则可能会出现奇怪的问题。
  • 结构体里如果开数组(尤其是数组较大的时候),自己写一个空的构造函数。否则可能会出现奇怪的问题。
  • 多测清空!!!!(请确认每一个 \(\text{subtask}\) 都清空了)。但是如果题目只保证了 \(\sum n\) 小于几,而没有保证数据组数,不要用 memset(否则可能复杂度变成 O(T * MAXN),你就 \(\text{TLE}\) 了)。
  • 对拍时一定要写 srand,不然可能就白拍了。
  • 定时存一存代码。写新做法时,不要把原本的做法删了:可能有些部分还能用上,或者可以用来对拍,或者你新做法写不出来(或想错了)时,原来做法至少还能帮你拿到一些保底分。

算法相关

  • 二分上下界都 \(\leq 2\times10^9\) 时,有可能 \(l+r\) 会爆 int
  • 线段树:
    • 空间要开 \(4\) 倍(但是千万不要写成 MAXN << 2 + 5)。
    • 莫忘 push_uppush_down
    • 区间修改 / 查询时,应该是 if (ql <= mid)...; if (qr > mid)...;。不要把 if (qr > mid) 写成 else
  • 倍增(例如树上跳 \(\text{LCA}\))时,因为 \(u\) 点本身在向前跳,所以如果之后的运算中,需要用到原本的 \(u\),那么一定要提前复制一个替身变量。
  • 与上一条类似。分解质因数时,被分解的数在不断被除。如果后面要用到原来的值,则要存一个替身变量。
  • 分治中,分清 l1。要 for(l~r),千万不要写成 for(1~r)。我在写分治优化缺一背包时,犯过几次这个错误。
  • 同一道题目里,有些量需要取模,而其它量不需要取模。一定要注意区分,千万不要看到乘法就取模。

其他状况

  • 江苏省的电脑是 \(\text{windows}\) 系统,配了 \(\text{noi linux}\) 的虚拟机。我是只用 \(\text{windows}\) 的。初始时,你的虚拟机可能有两种状态:(1) 它自己就是一个小窗口,这是比较理想的状态,你直接把它最小化就可以了;(2) 另一种情况是虚拟机全屏了,此时你找不到 \(\text{windows}\),千万不要慌,千万不要点右上角的退出(或关机)按钮(否则整个虚拟机就都没了,你收不到题目,也交不了代码)。正确做法是把鼠标移动到屏幕下方,会出现一个最小化的键,点这个键,就可以回到 \(\text{windows}\) 了,并且你的虚拟机也没有退,它变成了一个小窗口。

考场策略

比较主观,仅供参考。

  • 先把所有题都看一遍。不要看到有的题面长 / 看起来向自己不会的算法就跳过。
  • 不管简单题或难题,保证 \(20\) 分钟的有效思考。不要发呆,或者迷茫、抱怨、产生负面情绪,都是不好的。思考时,在草稿纸上写下每一个小思路。有时候思考的过程像是在图上搜索,如果一个分支想不通就回溯,换另一个分支。把这些分支都写下来,可以极大地帮助思考。NOIP / CSP-S 一定会有较多简单题(即使它们经过了伪装,不易被看出来),\(20\) 分钟左右的思考时间,就是要分析题目性质,拆掉所有这些伪装,发现核心的问题,然后套用我们学过的算法去解决它。
  • 保持信心,猛刚正解。承接上一条的意思,因为题目不会太难,我尽可能往正解方向去想。去年我已经拿过一等奖了,所以今年光拿到一等奖对我没有意义,我要冲击高分,就必须猛刚正解(当然,这样有一定风险,最后暴力分都没拿到,连一等奖都没有。请没拿过一等奖的同学谨慎尝试)。我发现我在模拟赛时,常常自己陷入自闭,觉得好难的一道题,只要上 qq 听别人说了句“这题很简单”,往往一小会后就能想出来。说明我还是不够自信。考试时要多一些信心,确信题目不难,自己能想出正解。
  • 时间分配上,前 \(30\) 分钟读题 + 思考 T1,前 \(50\) 分钟内一定要把 T1 做出来。然后 \(20+60\) 分钟想 + 做 T2。接下来 \(20+60\) 拿到 T3 高分(或满分?)。最后 \(20\sim 30\) 分钟把 T4 暴力打了。当然这只是一种理想情况,考场上要随机应变。但是务必保证至少做出 \(2\) 题。
  • NOIP / CSP-S 中简单题(T1, T2)的代码,应该不会很长。写之前手玩一下样例,确保算法正确。先写比较核心的部分,再写比较板子的部分。例如:线段树这种又长又套路的东西,就放到最后写(以免写完后才发现做法假了)。
  • 对拍。一定要对拍!!!\(60\) 分钟的代码时间里是留足了对拍时间的。不对拍就是在裸奔!!!不要只和暴力拍小数据,自己造几组大的极限数据测一下。
  • 没事上个厕所,有助于放松心情。

思考题目的技巧/套路/有用的联想

OI 题目千变万化,思考方法也是很多很多。这里只列举一些比较重要的。

序列相关:

  • 序列问题,考虑是否可以先将序列排个序。例如很多选子序列的题,其本质是选子集,那不妨先把原序列排个序;但如果是真的选子序列(要依赖原序列的顺序),那就不好排序了。
  • 序列问题,遇事不决差分一下(或者对 \(01\) 序列做 \(\operatorname{xor}\) 前缀和),说不定有奇妙性质。(或者前缀和一下?)
  • 普通序列变 \(01\) 序列。例如:对一个值 \(x\),把序列中 \(> x\) 的置为 \(1\),\(< x\) 的置为 \(0\)。
  • 一类字典序最小/最大化问题可以转化为:按顺序枚举 + \(\text{check}\) 问题。
  • 要求字典序小于/大于某个东西,考虑一段前缀都是相等的,第一个不同的位置在哪里?(数位 DP 常用到)。
  • DP 技巧:把代价均摊到每次新加入的数产生的增量上(差分)
  • 设计 DP 状态时,不一定要把序列里的位置固定死。可以只考虑已加入的元素的相对位置关系。或者考虑每次操作为插入一段东西(尤其是序列里只有“包含”或“并列”关系时)。

计数相关:

  • 期望问题,有时每种方案出现的概率一样,那么此时 期望 = 总和 / 方案数,由此可以转化为求和问题。
  • 求和问题,经常用到拆贡献的方法。即分别考虑每个元素对总和的贡献。
  • 总方案数 - 不合法方案数(容斥的思想)。

数据结构相关:

  • 考虑枚举一些什么:如枚举位置?枚举值?枚举答案?(能不能换成二分答案?)。枚举了一个东西,看能不能用数据结构快速维护出另一个东西。
  • 边界入手考虑问题,如:第一次操作会做什么?。有的构造题,我们可以从数据规模最小的情况出发,然后归纳地构造。
  • 把问题离线,预处理一些东西?
  • 如果有非常奥妙的操作,啥数据结构都维护不了,那试试分块吧。
  • 删边的处理方法:(1) 分块。(2) 时光倒流(可能可以用 \(\text{kruskal}\) 重构树记录时光倒流的过程)。(3) 线段树分治(不常用)。

其他:

  • 二进制,拆位考虑。有些问题可以按每一位是 \(0/1\) 分治。
  • 给出一堆点对:在点对之间连边,尝试建图。
  • 求 \(\gcd\) 为 \(x\) 的答案 \(\to\) 求 \(\gcd\) 为 \(x\) 的倍数的答案,然后容斥。
  • 贪心配对:(1) 最大配最小。(2) 最大怼次大 / 最大怼所有。例如有些树上问题,可以确定一个根,然后让所有儿子配。
  • 矩阵快速幂中间,多了一些奇怪的点:把两点之间的每一段分别拿出来做快速幂,可以预处理转移矩阵。复杂度 \(O(C^3\log n + mC^2\log n)\),\(C\) 是矩阵大小,\(m\) 是奇怪点的数量。
  • 抓住操作中,不变的东西(如总和的奇偶性不变?)
  • 树上问题,直径 / 重心有没有妙妙的性质。
  • 博弈题:二分答案(或者考虑二分答案,可以帮助你思考)。

最后,祝大家考出好成绩!

NOIP/CSP-S 考前注意事项的更多相关文章

  1. noip考前注意事项

    明天就要离开学校,后天的现在Day1已经考完啦,临近考试了紧不紧张呢(不紧张才怪),那么考前我们应该注意点什么呢? 1.带好自己的证件,带好自己的证件,带好自己的证件,这很重要. 2.试机的时候一定要 ...

  2. NOIP&CSP 考前 Dev-cpp 的选项问题和考试心态

    (进入考场后您将获得一个崭新的 \(Dev-cpp\),没有中文,没有编译选项,没有缺省源:我还将获得一个崭新的脑子,没有心态,没有智商,没有调试能力--) 中文 \[Step1 \] \[Step2 ...

  3. NOIP的模板--考前复习

    距离NOIP还有25天 可以去放弃一些巨难得题目去搞一些模板了 -------在校老师的原话 一·快排 虽然可以手打,最好用STL,里面有很多优化,会快很多 #include<iostream& ...

  4. HeRaNO's NOIP CSP Round Day 2 T3 ginkgo

    睡醒后我第一眼:这不主席树裸题吗? 先统计dfs序,把树上问题转化为区间问题 区间大于等于某个数的个数...主席树模板? #include<bits/stdc++.h> #define r ...

  5. HeRaNO's NOIP CSP Round Day 2 T2 PESTC

    对于我这种菜鸡来说还是挺有迷惑性的. 在考场发现答案问的是跟最值有关的数量,想到二分,结果果然具有单调性,考虑二份答案+验证 其实什么反转什么的,可以不用去管他,对于长度小于二分答案mid的道路,不去 ...

  6. HeRaNO's NOIP CSP Round Day 2 T1 building

    考试的时候居然睡着了... T1的60分做法很明显,3^n枚举每个状态并进行验证 (考试剩十分钟结束的时候我开始打,,不到五分钟就写完了? 暴力(60分) #include<bits/stdc+ ...

  7. 括号树 noip(csp??) 2019 洛谷 P5658

    洛谷AC通道 本题,题目长,但是实际想起来十分简单. 首先,对于树上的每一个后括号,我们很容易知道,他的贡献值等于上一个后括号的贡献值 + 1.(当然,前提是要有人跟他匹配,毕竟题目中要求了,是不同的 ...

  8. NOIP&CSP PJ 难度刷题记录

    前言 本来不想写前言的(>人<:) 这只是 mjl 给我们布置的作业,并不是我自己在刷题! 不保证所有代码的正确性,它们仅仅是通过了所有数据点而已. 1.模拟板块 整体难度:红~黄(模拟不 ...

  9. [Noip 2018][标题统计 龙湖斗 摆渡车 对称二叉树]普及组题解

    啊喂,都已经9102年了,你还在想去年? 这里是一个Noip2018年PJ第二题打爆的OIer,错失省一 但经过了一年,我学到了很多,也有了很多朋友,水平也提高了很多,现在回看当时: 今年的Noip ...

随机推荐

  1. 【小白学PyTorch】18 TF2构建自定义模型

    [机器学习炼丹术]的炼丹总群已经快满了,要加入的快联系炼丹兄WX:cyx645016617 参考目录: 目录 1 创建自定义网络层 2 创建一个完整的CNN 2.1 keras.Model vs ke ...

  2. Java知识系统回顾整理01基础03变量09块

    一.定义 块:从{ 开始 到对应的} 结束,即一个块 public class HelloWorld { //类对应的块 public static void main(String[] args) ...

  3. 《C++ primer plus》第3章练习题

    注:有的题设条件自己改动了一下,比如英寸英尺改成米和厘米,部分题目自己加了点额外要求. 1.要求用户输入身高(m),用下划线提示用户输入,将身高转化成"米"加"厘米&qu ...

  4. JVM初步入门(很初级,建议只做大致了解用)

    jvm初步入门 本博客中的所有内容都是来自b站狂神说视频教程,如有侵权联系我删除. 下面是视频链接:b站狂神说 关于jvm的几个小问题 1. jvm的位置: jvm是一个运行在操作系统上的用c语言编写 ...

  5. gitlab介绍

    1. GitLab简介    GitLab是一个利用 Ruby on Rails 开发的开源应用程序,实现一个自托管的Git项目仓库,可通过Web界面进行访问公开的或者私人项目. GitLab拥有与G ...

  6. Redis 的完整安装过程

    Windos 版本安装 Redis 官方并不支持 Window 版本,但是微软公司在 Github 上维护了一个 Windows 版本的 Redis 项目,供 Windows 用户下载使用. 下载地址 ...

  7. 多测师讲解rf--定位元素--高级讲师肖sir

    注意点: 注意点: rfbug:rf 点击勾选一个运行就运行两个出现用例执行 注释快捷键: 改字体大小: 快捷键:显示关键字信息 (ctrl+鼠标悬浮) 注解不能空格在注解 未保存提示 定位方法 : ...

  8. IIS日志文件越来越大导致C盘空间变小处理方法

    问题概述 C:\inetpub\logs\LogFiles\W3SVC文件夹越来越大,IIS日志会消耗大量的硬盘空间,有潜在写满整个硬盘空间的风险,为了解决这个问题很多用户会选择关闭日志,但显然IIS ...

  9. C语言中数组与指针的异同之处!你不知道的编程奥秘~

    C语言的数组和指针一直是两个容易混淆的东西,当初在学习的时候,也许为了通过考试会对指针和数组的一些考点进行突击,但是很多极其细节的东西也许并不是那么清楚.本篇侧重点在于分析数组与指针的关系,什么时候数 ...

  10. elasticsearch-安装-centos7- es7.5 搭建

        centos6 搭建 参考 https://www.cnblogs.com/php-linux/p/8758788.html   搭建linux虚拟机  https://www.cnblogs ...