OI/CSP 赛制注意事项汇总
一、文件输入输出规范
* 严格使用规定的文件名进行读写!
* 注意:
* freopen() 要写在 main() 的最前面。
* 提交之前查看 freopen()是否被注释了!
------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
二、考试题目安排建议
* CSP通常是 4 道题:
* 前两题追求满分,一定要写稳,思路简单,调试充分。
* 后两题以骗分为主,不要贪心求全分,能拿多少算多少,尽量提交部分正确代码。
------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
三、数组使用规范
* 所有数组建议定义为 全局变量,避免栈空间爆炸。
* 能开的最大全局数组容量约为:1e8(1亿)个 int
* 示例:int a[10000][10000]; = 1e4 * 1e4 = 1e8,接近极限
* 不要轻易在函数内开大数组,如:
------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
四、常见危险操作(一定注意)
问题 描述 ❗ 爆 int 如 a×b>2×109a \times b > 2 \times 10^9a×b>2×109,需要用 long long ❗ 除以 0 所有除法都要判断除数是否为 0 ❗ 死循环 while (true) 时一定要确保能 break ❗ 死递归 递归不能无限下去,应有明确终止条件 ❗ 变量重名 函数内外变量、循环变量容易冲突 ❗ 变量未初始化 int x; 未赋初值,结果不可控 ❗ 定义范围不清 变量是否会越界、负值、浮点误差?提前想清楚!
------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
五、数据设计与自测建议
必做的几种测试数据:
类型 示例 用途 ✅ 最小数据 n=1, a=0 检查数组是否越界,递归是否终止 ✅ 最大数据 n=1e5, a[i]=1e9 检查是否超时、爆内存、爆int ✅ 全相同 所有数相同,如[1,1,1,1] 检查逻辑是否遗漏边界 ✅ 特殊构造 正好分界/相等/不成立的条件 判断 if 和 else 是否都能跑到 ✅ 全负数 / 全零 [-1,-2,-3], [0,0,0] 检查符号和乘法逻辑是否正确
------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
六、其他考试提醒
* 写代码前先把题目数据范围、时间限制、输入格式抄在草稿纸上思考。
* 定义变量时尽量加上注释/有意义的变量名,避免后期调试混乱。
* 文件名、数组大小、边界处理,三次检查没问题再提交。
* 保底策略:写不出可以提交暴力解,或写个循环输出样例骗分(能拿一点是一点)。
------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
总结:新手必须牢记的几句话
* “数组全局开、不随便写递归、不用没把握的特性。”
* “freopen写对,文件名检查 3 遍。”
* “前两题保分,后两题骗分。”
* “每写完一题都自己造几个最小最大样例再提交。”
------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
比较两份文件是否相同(可以不学)
两份文件放在同一目录下,在该目录打开终端
第一份文件名假如为1.ans,第二份文件名假如为2.ans