NOIP/CSP-S 考前注意事项
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_up和push_down。
- 区间修改 / 查询时,应该是 if (ql <= mid)...; if (qr > mid)...;。不要把if (qr > mid)写成else。
 
- 空间要开 \(4\) 倍(但是千万不要写成 
- 倍增(例如树上跳 \(\text{LCA}\))时,因为 \(u\) 点本身在向前跳,所以如果之后的运算中,需要用到原本的 \(u\),那么一定要提前复制一个替身变量。
- 与上一条类似。分解质因数时,被分解的数在不断被除。如果后面要用到原来的值,则要存一个替身变量。
- 分治中,分清 l和1。要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 考前注意事项的更多相关文章
- noip考前注意事项
		明天就要离开学校,后天的现在Day1已经考完啦,临近考试了紧不紧张呢(不紧张才怪),那么考前我们应该注意点什么呢? 1.带好自己的证件,带好自己的证件,带好自己的证件,这很重要. 2.试机的时候一定要 ... 
- NOIP&CSP 考前 Dev-cpp 的选项问题和考试心态
		(进入考场后您将获得一个崭新的 \(Dev-cpp\),没有中文,没有编译选项,没有缺省源:我还将获得一个崭新的脑子,没有心态,没有智商,没有调试能力--) 中文 \[Step1 \] \[Step2 ... 
- NOIP的模板--考前复习
		距离NOIP还有25天 可以去放弃一些巨难得题目去搞一些模板了 -------在校老师的原话 一·快排 虽然可以手打,最好用STL,里面有很多优化,会快很多 #include<iostream& ... 
- HeRaNO's NOIP CSP Round Day 2 T3 ginkgo
		睡醒后我第一眼:这不主席树裸题吗? 先统计dfs序,把树上问题转化为区间问题 区间大于等于某个数的个数...主席树模板? #include<bits/stdc++.h> #define r ... 
- HeRaNO's NOIP CSP Round Day 2 T2 PESTC
		对于我这种菜鸡来说还是挺有迷惑性的. 在考场发现答案问的是跟最值有关的数量,想到二分,结果果然具有单调性,考虑二份答案+验证 其实什么反转什么的,可以不用去管他,对于长度小于二分答案mid的道路,不去 ... 
- HeRaNO's NOIP CSP Round Day 2 T1 building
		考试的时候居然睡着了... T1的60分做法很明显,3^n枚举每个状态并进行验证 (考试剩十分钟结束的时候我开始打,,不到五分钟就写完了? 暴力(60分) #include<bits/stdc+ ... 
- 括号树 noip(csp??)   2019  洛谷 P5658
		洛谷AC通道 本题,题目长,但是实际想起来十分简单. 首先,对于树上的每一个后括号,我们很容易知道,他的贡献值等于上一个后括号的贡献值 + 1.(当然,前提是要有人跟他匹配,毕竟题目中要求了,是不同的 ... 
- NOIP&CSP PJ 难度刷题记录
		前言 本来不想写前言的(>人<:) 这只是 mjl 给我们布置的作业,并不是我自己在刷题! 不保证所有代码的正确性,它们仅仅是通过了所有数据点而已. 1.模拟板块 整体难度:红~黄(模拟不 ... 
- [Noip 2018][标题统计 龙湖斗 摆渡车 对称二叉树]普及组题解
		啊喂,都已经9102年了,你还在想去年? 这里是一个Noip2018年PJ第二题打爆的OIer,错失省一 但经过了一年,我学到了很多,也有了很多朋友,水平也提高了很多,现在回看当时: 今年的Noip ... 
随机推荐
- Leetcode-栈&队列
			20. 有效的括号 https://leetcode-cn.com/problems/valid-parentheses/ 给定一个只包括 '(',')','{','}','[',']' 的字符串,判 ... 
- Python练习题 009:水仙花数
			[Python练习题 009] 打印出所有的"水仙花数",所谓"水仙花数"是指一个三位数,其各位数字立方和等于该数本身.例如:153是一个"水仙花数& ... 
- 记录从Winserver2012R2升级到Winserver2019
			升级系统是必不可少的,最近想搞虚拟化Hyper-V:于是着手需要装一台WIN server 2019. 手头有一台Winserver 2012R2,正好拿来测试升级,此博做一个记录. 操作流程:在升级 ... 
- VS调试时查看动态数组的全部元素
			转载:https://blog.csdn.net/sinat_36219858/article/details/80720527 
- Thymeleaf 异常:Exception processing template "index": An error happened during template parsing (template: "class path resource [templates/index.html]")
			Spring Boot 项目,在 Spring Tool Suite 4, Version: 4.4.0.RELEASE 运行没有问题,将项目中的静态资源和页面复制到 IDEA 的项目中,除了 IDE ... 
- 二进制K8S集群使用Bootstrap Token 方式增加Node
			TLS Bootstraping:在kubernetes集群中,Node上组件kebelet和kube-proxy都需要与kube-apiserver进行通信,为了增加传输安全性,采用https方式, ... 
- 连Python产生器(Generator)的原理都解释不了,还敢说Python用了5年?
			最近有很多学Python同学问我,Python Generator到底是什么东西,如何理解和使用.Ok,现在就用这篇文章对Python Generator做一个敲骨沥髓的深入解析. 为了更好地 ... 
- thinkphp6.0.x 反序列化详记(二)
			前言 接上文找第二条POP链. 环境配置 同上文 POP链构造 寻找__destruct方法 仍然是寻找__destruct,这次关注AbstractCache.php(/vendor/league/ ... 
- hasura的golang反向代理
			概述 反向代理代码 对请求的处理 对返回值的处理 遇到的问题 概述 一直在寻找一个好用的 graphql 服务, 之前使用比较多的是 prisma, 但是 prisma1 很久不再维护了, 而 pri ... 
- 解读JVM虚拟机
			概要点: java虚拟机概述和基本概念 堆.栈.方法区 了解虚拟机参数 垃圾回收概念和算法.及对象的分代转换 垃圾收集器 java虚拟机的原理: 所谓虚拟机,就是一台虚拟的机器.它是一款软件,用来执行 ... 
