社区讨论
复赛注意事项
学术版参与者 32已保存回复 35
讨论操作
快速查看讨论及其快照的属性,并进行相关操作。
- 当前回复
- 35 条
- 当前快照
- 1 份
- 快照标识符
- @m2ok4ync
- 此快照首次捕获于
- 2024/10/25 17:56 去年
- 此快照最后确认于
- 2025/11/05 01:36 4 个月前
CSP复赛注意事项
如何把该拿到得分都拿到手?
拿到试题之后,首先建立各个题目的文件夹及文件。建立完毕后核对每个文件夹的名称是否有错
误,切记名称不要脑补!!!
每道题目一定要仔细认真读题,题目的测试样例一定要手动模拟分析一遍。大多情况下分析的过程
中就能找到思路,同时分析样例也可以辅助理解题意,避免代码写完了结果题目看错、理解错的情
况。
题目分析完毕后,一定要先写**暴力解法!!!无非是模拟枚举贪心!!!**这样的话如果最后没想到
正解,可以有暴力分垫底(至少二十分左右);即使想出了正解,暴力解法的程序也可以用来生成随
机测试数据和对拍正解。
题目的正解往往是从暴力一点一点的推出、优化得到的。写代码不要直接上来就写,先规划好想通
了再写,不要边想边写,不然最后写不出来了又得从头再来,浪费大量时间。
过了题目的大中小样例后一定要造随机和极限数据测试,数据越坑越阴险越好。极限数据不仅要保
证数据量最大,还要保证数据值最大,用来检测RE、TLE、爆int之类的问题。
如果目前已经可以拿到较高的分,在时间有限的情况下,可以考虑放弃剩余的小分数。
考试题目难度不一定成单调性,有可能随机分布。想不出来就先看下一题,不要出现考完只看了第
一题的情况!!!跳过的题目最后一定要再回来想一遍不要空着,哪怕猜个结论都可以。
简单的题目一定不要整没必要的技术!!!**写的越多越复杂,错的概率就越大!!!**能用STL的容
器优先考虑现有容器,问题不复杂的情况下,set不比splay好写?
建立数组和变量时,一定要看着数据范围建,数组尽量多大一些,切忌搞极限微操!!!没人能保
证自己永远不越界!!!
牢记题面越简单,往往题目越难或者里面处处设陷阱;题面很难读懂,有时题目反而很简单。(签到
题除外)
常用的这些算法和数据结构尽量熟练,毕竟不考模板。
如果题目的数据范围中包含特殊的数据,一定要写特判骗分,例如 k = 1 这样的。有的题还可以用
if 判断 n 的大小,选择不同数据范围,小数据用暴力,大数据写正解。
分组、连通这样的题目可以联想并查集。求最优解这样的题目得分情况,二分、贪心、DP都有可
能,正解想不出来就用这三个算法骗分。如果会模拟退火、遗传算法这些随机算法,在这种求最优
解的题目中也可以骗分。
数据范围较小的题目大概率搜索相关,能记忆化尽量记忆化,能剪枝尽量剪不过不要剪错了。数据
范围很大,一般就只能O(1)那种,很大几率是结论题,可以暴力打表找规律。有的题目可以从二进制或者数学角度找思路,有的题题面和树、图无关但可以用树、图来联系。
哈希常用模数1e9+7和1e9+9,进制可以用233也可以稍大6位左右,例如1e6+7和1e6+9。
有的时候SPFA比dijkstra还要快,有负环一定SPFA。拓扑序这个东西记得检查一遍,往往有奇效。
带次数限制的最短路,首先想到分层图。
环问题可以从中断开转化为链问题。
字符串读入尽量cin,如果需要读入空格整行读入推荐getline,不过记得写头文件。getline和cin尽
量不要混用。
换行符是根据制作输入文件时用的系统来的,不一定是什么以题目中的说明为准,如果没说就当作
不确定。
写完程序记得加上文件IO,然后自己拿样例测试一遍是否可以正常进行文件输入输出。文件名一定
确保写对,不认识的单词就多对比几遍。
数据读入推荐cin cout体系,不要和scanf printf混用。数量的话可以用ios::sync_with_stdio优化,不
要拼错了。快读熟练的话可以写快读,注意快读也有数据类型,也要注意负数。
文件IO推荐freopen体系,注释掉正常运行不用改来改去,不过切记最后把注释取消。在最终提交
前,要把所有代码都用文件IO测一遍样例。
整数和整数运算结果是整数,如果要用到实数需要转换。遇到取余的题目,每步进行取余不要怕麻
烦,而且除法不具有取余的传递性。
多个不同结构体的属性,尽量不要有重名的,以防止用串了。
勤加保存,以防万一。保存快捷键Ctrl+S,文件名上没有星号了就是保存成功了。
仔细认真,不要慌,不要作弊。
**目标100+,不必深入了解过多的算法和数据结构。**掌握基础的C++编程能力,能够解决一些基础的模拟题目,以及理解一些简单的贪心算法就足够了。
**目标200+,需要熟练掌握普及组以内所有初级算法。**做题思路:前面第一、第二题,求稳!可以多花时间和精力,确保不能丢分;第三、第四题,“骗分”!
目标300+,需要熟练掌握普及组常见算法以及大量的备考经验和数学知识,并且具备在考场上打出大模拟的代码能力。
考前备考注意事项
1
注意细节
竞赛不仅仅是关于智力的考验,更是综合能力的较量,以下三点细节供大家参考:
(1)睡眠:一般建议考前一周要比平时多睡来养足精神;
(2)比赛前不要吃平时不怎么吃的食物避免考试的时候闹肚子;
(3)不要有太大的心理负担,考好了考砸了,地球照样转,你照样呼吸,没什么大不了,家长也不要给孩子太大压力,竞赛需要放松才能表现的更好。
2
要维持手感
**手感对于比赛来说非常关键,考前每天都要刷刷题,**不能在这段时间内完全不练,如果这样做,可能会丧失之前在暑假和国庆期间辛苦积累的势能,因为编程的熟练度需要通过持续练习来维持,考生们在备考期间务必保持这种状态,直到考试前夕。
3
翻阅总结
把自己之前写过的总结,错题集,拿出来翻一翻,避免考试的时候犯同样的错。
现场赛注意事项33条
注意:2021年由于评测系统有大改,建议使用noilinux系统,使用windows系统导致的平台差异,都将由选手自己负责
1:2021年评测系统改成最新版noilinux,经过实测,G++版本从4.8升级到了9.3, 所以请尽量使用noilinux系统
2:具体配置见:
https://www.noi.cn/gynoi/jsgz/2021-07-16/732450.shtml
3:使用gets在最新的g++编译器中会产生编译错误,如果需要读入一行字符串,可以使用string s; getline(cin, s);
4:发下来的东西不是给你吃的,是给AK的人吃的,饿了建议吃巧克力
5:windows下一定要注意设置文件夹选项,显示扩展名
6:对于windows用户,一定要事先了解清楚哪个盘不清空,考试过程中D盘一般不清空, 有些省份可能是其他盘,以你具体情况而定,一般主办方会讲, 下面就以D盘为例(代表不清空的盘)
7:请尽量在D盘下写代码,以防止断电重启等不可抗力因素
8:D盘下有一个以你考号命名的考生文件夹下, 比如浙江的一般是 ZJ-xxxx, 在这个目录下, 你需要新建四个子目录, 子目录的名字是四个题目的文件名, 这个文件名会在下发的题面PDF里面给出
9:在每个子目录下新建一个与子目录同名的后缀名为cpp的文件
https://mmbiz.qpic.cn/mmbiz_png/Tyql4VBUvsQlHF0J1kVj5Xu79lGavJ9KzOT1ib4ZhGdLtiaUIUc0InkB26iaMtUOib0FnHG1WsuTgP8PtQsEhEh6FA/640?wx_fmt=png&from=appmsg&tp=wxpic&wxfrom=5&wx_lazy=1&wx_co=1
10:在每个源程序中, 你需要加入文件操作, 下面是例子, 在离开考场前一定要反复检查目录结构, 文件夹名字, 文件名字以及是否加了文件操作
https://mmbiz.qpic.cn/mmbiz_png/Tyql4VBUvsQlHF0J1kVj5Xu79lGavJ9KYfWcoSicVLgUYibJAaicfjfAr7HFUdaTtEwTLVHFriap7xdIICS2njGdjA/640?wx_fmt=png&from=appmsg&tp=wxpic&wxfrom=5&wx_lazy=1&wx_co=1
11:不要define int long long, 可以把int的变量开在一起, long long的变量开在一起, 否则,数据量大的题很容易TLE或者MLE
12:多组数据尽量使用while (scanf("%d%d",&a,&b) == 2 ) 的形式, 此方法会确保读入的数符合你的类型定义, 即便后台数据文件末尾出错了也不至于让程序崩溃
13:数据要读入完全, 不要中途return 0
14:考试结束前把要提交的程序测一遍所有的样例以及手造数据, 确认无误再放到相应文件夹内, 检查是否有多余调试信息
15:改动一个程序后, 一定要将所有数据测试一遍, 确保改动不会导致更低的分
16:检查数组大小, 是否可能会出现RE或者MLE的情况
17:多组数据一定要多次跑数据, 检查是否有清空
18:多组数据清空的时候不要用memset, 需要清空多少,清空多少, 要与输入同阶
19:每个题手造10组小数据, 手动检测暴力程序的正确性, 避免出现0分的情况
20:测数据的时候题目中的上下范围极限的数据要测到, 注意windows下dfs层数特别大的时候可能会本地爆栈, 不必惊慌, linux下可以采用命令行手动加栈的方法,比如ulimit -s 51200(linux用户一定要自己手动测试过)
21:因为OI比赛无法提交, 因此写完一个程序要立刻把暴力程序打掉, 放在一边对拍, 去做下一题
22: 一定要先拿容易拿的分,开场的时候思考超过5分钟一点想法都没有的题果断打暴力跳过. 等写完其他题再回来
23: 现场赛的代码尽量结构化, 一个函数完成一件事情, 方便后期调试, 每个函数不要过长
24:参赛前一天九点就可以上床准备睡觉
25:开敲一个题之前估计好时间, 在考前的训练中有意识的强化这一点
26:每个题的题意,思路进展,代码进展,可以用草稿纸详细清晰的记录下来
27:'''输入输出尽量使用 scanf printf'''
28:为了防止devcpp崩溃的现象, 你需要学会命令行操作
29:比赛结束前半小时停止做题,先检查,每一个文件夹都要仔仔细细检查过去
30:128MB/256MB/512MB/1G 分别能开多大空间,要滚瓜烂熟
31: 爆int,爆long long要小心
32:一些windows下的常见命令
g++环境变量配置
Windows10下的操作(Win7下类似)
-
右键桌面的 Dev-C++ 图标,“打开文件所在位置”
-
打开那个文件夹下的 “MinGW64”,“bin”,然后随便找一个文件夹下的文件,右键“属性”,把“位置”里的路径完整复制下来
-
右键“此电脑”,“属性”,左侧栏“高级系统设置”,下面的“环境变量”,在上面那个框框左键双击打开 “Path”,“新建”,把那个之前复制过的路径粘贴进去
- 注意: win7下点开path后将路径添加到末尾,以分号隔开
- “确定”,“确定”,“确定”,然后重启一下 cmd ,就好了
evcpp 加栈方法
-
最上面那一栏点 “工具”,“编译选项”
-
勾选 “编译时加入以下命令”
-
在那个框里加入
- Wl,--stack=1024000000
这里的l是L的小写而不是i
stack=后面的数字是字节数
如果之前写过其他命令的话就先打个空格,比如:
- Wall -Wl,--stack=1024000000
cmd常用命令
win + R 输入cmd 调出 命令行工具
cd C:\Users\justdoit\Desktop 表示进入桌面
cd code 表示进入当前文件夹下的code目录
cd .. 表示返回上层目录
D: 表示进入D盘
dir 显示当前目录下的所有文件
常用编译选项
g++ std.cpp 编译后产生a.exe
g++ std.cpp -o target 编译后产生target.exe
g++ std.cpp -o target -Wall -Wall (ll是LL的小写)开启编译器智能警告,编译完记得看一下编译器报的信息,对纠错有帮助
g++ std.cpp -o target -Wall -O2 本地对拍时可以打开 O2 优化,使程序跑的更快
33:一些linux下的常见命令
https://www.bilibili.com/video/BV1rK4y1r7B3?spm_id_from=333.999.0.0
CSP-J 赛前复习
一定要对自己有信心,各位经过了长时间的学习、集训,都已经具备了很
强的实力,一定要相信自己的水平,放平心态,用自信、平和的状态面对
每一道题目,敢于思考、敢于写代码。相信自己一定可以收获理想的成绩!
一、考试注意事项
1、**先易后难:**题目难度不一定递增,一道题很久做不出来,不要在一道题上死
磕,先做会做的题目,把能拿到的分拿到,最后回来再看做不出来的题。
2、**先打暴力和特殊情况:**一道题目没有百分百的把握写正解,就先写暴力算
法以及特殊情况拿部分分,部分分到手再思考如何改进,如何写正解。在很
多题目中,正解都是在暴力算法基础上优化而来的,而且先写暴力的话,还
可以跟你写的正解互相对照。
因此,阅读完题目之后,如果没有很明确的正解思路,就先做暴力和特殊情
况,暴力针对数据量较小的情况,通常使用 for 循环、dfs 来枚举所有可
能的答案或者方案,选出正确的答案。特殊情况例如一棵树退化成一条
链,n=1,给定的输入是特殊值等情况,具体题目具体分析。
3、无论题目难还是简单,都不要紧张,心态放松,你觉得题目难,所有人都
难,尽力把能拿到的部分分都拿到;你觉得简单,大家都简单,比拼谁发挥
稳定,细心不出错。比赛开始不要着急写代码,好好分析题目,在纸上梳理
代码的流程、逻辑,胸有成竹之后再写。不要受到他人影响,记住,先开始
写代码的不一定是高手,但凡开始写就能一遍写对的才是高手。
4、拿到题目之后,思考是否跟我们学过的某个算法有联系?回忆一下我们学
**过的算法,哪个可能是这道题的解法?**之前做过题目有没有跟这道题目类
似的?如果有,思路可以借鉴,但一定要仔细阅读题目,是否有所区别?不
能一看到题目类似就认为是原题。
5、回忆我们平时讲过的各个知识点的注意事项,比如看到“最大值最小、最
小值最大”,考虑是不是二分。看到题目中既有花费又有收益,考虑是不
是背包。看到最短路,别急着用 dijkstra 算法,先看看边权是否一样,如
果一样可以用广搜 BFS。诸如此类,平时积累的经验一定要熟练,考试的时
候多思考多回忆。
6、第一题跟第二题通常是模拟、枚举等简单算法,检查题目中是不是所有情
况都考虑到了,题目描述的过程有没有漏掉。2
7、**注意数据范围,注意数据范围,注意数据范围,重要的事情说三遍,**根据
范围选择 int 或者 long long,以及数组的大小。观察题目中是否出现乘
法?如果 2 个很大的 int 相乘,也有可能爆 int,需要细心判断。如果是多
组数据,注意每次结束之后把数组清零,vecotr、queue、stack 都要清
空,变量重新赋成初始值!
8、写完代码之后,除了测试题目中的样例,还要自己设计样例测试自己的程序
是否正确。设计样例的时候注意边界情况(n 取范围内最大值/最小值),
**特殊情况(例如 n=0,n=1)**的判断,细节问题往往影响很大。同时,数据
范围决定了正解的复杂度,根据范围考虑做法,20 以内可以考虑 O(2^n),几
百可以 O(n^3), 几千就是 O(n^2),几十万几百万就要考虑 O(n log n)
9、写完代码之后,检查**输入写了吗?输出写了吗?**调试程序的时候写的输出
中间变量语句删掉了吗?被注释掉的 freopen 打开了吗?检查检查用不用
开 long long,数组大小开够了吗?
10、
切记切记不要漏掉 freopen,同时检查跟题目要求的文件名是否一致
下面的代码要把 data 换成题目要求的名字。另外注意题目对于文件夹的命
名要求
CPPfreopen("data.in", "r", stdin);
freopen("data.out", "w", stdout);
fclose(stdin);//可以省略fclose,建议加上
fclose(stdout);
二、考前复习
1、回顾我们学习过的知识点,模拟、枚举、递归递推、DFS、BFS、二分、贪
心、前缀和、差分、数学知识、动态规划、图论,以及各类算法的模板(见后
文)。针对自己薄弱的部分,找到洛谷团队中的相应练习题,复习相应知识点
并重新写代码。
2、近 5 年 CSP-J 复赛的第一题、第二题,务必复习一遍,只要能做出前两
题,大概率就能拿省一;第一题做对,第二题拿部分分,大概率就是省二。因
此,对于近五年的前两题,需要保证题意、做法完全理解,而且能写对代码。
记住,仅仅明白题目的做法不是本事,会做而且能写对代码才算功夫到家。
3、回顾集训期间自己的错题、低级错误,重新做一遍,在不看题解的前提下
重新分析题目、写代码,检验自己是否真的已经会了。
4、学有余力的同学继续复习 CSP-J 复赛的第三题、第四题的暴力做法和特殊
情况做法。
三、模板
1、二分
2、前缀和 & 差分 & 二维差分前缀和
3、数据结构——动态数组 vector
4、数据结构——队列 queue & 栈 stack
5、数据结构——集合 set
6、背包问题:
01 背包(倒序循环)完全背包(正序循环)
7、线性筛素数
8、求最大公因数和最小公倍数
9、分解质因数
10、 深度优先搜索 DFS,实现枚举子集 (注意需要撤销标记)
11、枚举全排列
12、深度优先搜索(BFS)和广度优先搜索(DFS)对二维地图遍历,判断是
否能到达终点
13、深度优先搜索(BFS)和广度优先搜索(DFS)对求二维地图方案数
14、深度优先搜索(BFS)和广度优先搜索(DFS)对图进行遍历
15、拓扑排序
16、最短路 dijkstra 算法(压负数)
17、最短路 Floyd 算法(注意外层循环必须是中间点 k)
18、最小生成树 & 并查集 模板 (不要忘记初始化 fa 数组)
复赛历年知识点


四个题目的分析
T1:
以基础为主,基本想到解法不会太难,算法比较明显,一般用模拟,或者和数学关系较直接。
T2:
程序量要大一点,可能会用到一些基础算法,比如贪心,枚举,搜索之类。学生在做的时候有时候会遗漏考虑点。
T3:
难度加大,会涉及到二分、动态规划之类的算法,容易遗漏考虑点,不易得全分,考试的时候要注意全面性。
T4:
一般是压轴题,算法不明显,剪枝的搜索、动态规划、状压 DP、树形 DP 、树、图等。
重点算法归纳
总结起来想取得好的成绩,这几个相对比较重要的算法一定要学好:
- 枚举
枚举算法是指,列举出所有可能的取值,从中找出最优解。
- 模拟
模拟算法是指,通过逐步进行操作、逐步判断来推断是否符合题目中所给出的情况。非常耗时,一般不可能得到最优解,但是可以得到部分分数。
- 高精度
高精度一般来说会用在递推、动态规划求方案数,以及组合数学直接计算的方面。一定要熟悉高精度的加减乘,除法和求余相对出现的较少。
- 字符串
主要是字符串的一些相关操作和技巧。
- 贪心
贪心算法(又称贪婪算法)是指,在对问题求解时,总是做出在当前看来是最好的选择。也就是说,不从整体最优上加以考虑,他所做出的是在某种意义上的局部最优解。在关键时刻可以做出一些避免超时的决策,在比如说搜索、动规时也可以起到相对重要的作用,大大减少状态数。
- 动态规划
动态规划主要的思考规律:
定义函数(动态转移方程中转移量的定义)——>建立方程——>确定初值和边界。对思维的周密程度和逻辑要求非常高。可以用来训练思维,对于学习时间短的同学,动态规划可以帮助你迅速进入编程状态,也有助于帮你发现题目背后可能隐藏的更简便的算法。动态规划、贪心都是和子问题相关的,动态规划的基本思想是将一个大的问题划分成子问题,接着分别求解,而且能够将一些重复的计算记忆化,大大提高效率。
- 图论
最短路和最小生成树。最短路中需要学习Dijkstra算法和Floyd算法。近年来图论题目越来越难,至少掌握这两种。最小生成树需要掌握Prim算法和Kruskal算法。前者适用于稠密图,后者适用于疏密图。两者可以比较学习,比较它们的优点和不足。
- 常用的数据结构
最常用到的是堆(优先队列)、并查集以及树状数组堆。堆:只关注“直系亲属关系”,不关注“旁系”。常配合贪心使用。并查集:快速判断两个元素是否有关联,增加其他算法,还可判断元素间关系。树状数组堆:平衡查询和修改的操作复杂度的一种算法,常用于解决需要查询和修改的问题。
- 搜索
深度优先搜索和广度优先搜索。深度优先搜索:一条路走到底。广度优先搜索:每一步将下一步的可能性放入队列中,然后按照队列顺序来探测。比赛中往往会加入很多复杂的元素。
- 数学知识
快速幂、高精度、筛法选素数、辗转相除法。
“骗分”技巧
- 排除法:主要用于计算类题目,通过仔细阅读题目,理解要求和限制条件后,排除明显不符合的选项,然后对剩余的选项进行对比,选择最佳答案。
- 代入法:适用于选择题,直接将选项代入题目中,检验每个选项的正确性。这种方法简单直接,适合所有类型的题目。
- 反例法:更适合于判断题,通过思考边缘情况,尝试制造反例来验证试题内容的正确性。
- 反证法:提出和原试题相反的观点,验证此观点是否正确。如果正确,则原试题错误;如果错误,原试题正确。
- 上下文推断法:查看题目中的空缺部分的前后行代码,推断程序意图,从而得出正确答案。
- 真题复盘:通过练习历年的初赛真题来积累应试经验,认真读题并理解题目要求。
- 备赛策略:在初赛前进行充分的备赛,包括对所有学过的算法进行归类汇总,进行归纳、总结和拓展。
- 时间管理:在考试中合理分配时间,如果卡在某个问题上,可以先跳过并解答其他问题,避免花费过多时间而影响整体答题进度。
- 心态调整:保持积极乐观的心态,确保充足的睡眠,以最佳状态参加考试。



回复
共 35 条回复,欢迎继续交流。
正在加载回复...