CSP-J/S复试高分秘诀经验分享

前言

这篇文章是今年3月份参加NOI Online测试之前和老码农一起整理的一份资料,分享给备战今年10月份复赛的OIer,

还有不到4个月,还有很多不会的知识点,没有退路,唯有努力坚持前行。

重点

  • Step1:通读所有题目:确定大概算法、确定是否能打表或者暴力枚举
  • Step2:草稿纸:仔细审题,标重点;梳理分支;梳理数据规模
  • Step3:静态检查:先检查代码,再调试,省时间
  • Step4:最后10分钟检查:C++程序名、输入文件名、输出文件名、去掉注释:freopen,fclose代码

准备

  • 携带橡皮、笔,笔可适当带3种颜色不同,便于**【标记重点】、【关键信息】**
阅读题目:仔细审题
  • 通读:题目2~3遍,判断
    • 难易度,通常从前往后越来越难
    • 大概使用算法:打表、枚举、排序、递归、递推、贪心、高精度、图、树、动态规划
  • 标记:在纸上标记**【重点信息】、【细节信息】、【特别注意事项】**
梳理思路:三思而后行
  • 阅读数据规模,分析样例数据分布:重要、重要、重要

    • **极小值:**0、1(0、1一定要重视
    • **极大值:**数组越界、数值溢出
      • 比如long型数据太大,会用科学计数法输出
    • 正常值
    • **异常值:**边界值,例如:文具订购,三种都买14元,则边界值:13元、14元、15元
    • 数据规模
      • 小:可能搜索算法
      • 大:可能考虑动态规划、数学算法
  • 条件分支:草稿纸

    • 各条件分支结合样例数据及题目先梳理清楚,用笔在草稿纸上记录下来
  • 确认算法

    • 根据数据规模,判断使用算法时间复杂度、空间复杂度(O(N 2 ^2 2)、O(N log N)、O(N))
  • 遇到熟悉的题目要十分警惕,先在草稿纸上演算计算步骤,并测试其正确性

  • 编写代码前要有充足思考时间,最好举例子通过草稿纸验证 -> 尽量不要边写边改

    • 比如递推怎么写
    • 比如动态规划方程怎么写
    • 比如???

编程

注意点
  • 程序名和输入输出文件

    • 文件名是否和题目吻合,一定要注意大小写、扩展名 -> 一旦拼错,爆零
  • 编程:保持思路清晰,参照样例数据分布和条件分支,尽量一次把程序编好

  • 检查程序:静态检查 -> 动态来回调试程序是非常耗时的,多思考,更省时间

    • 不着急直接调试,先重新阅读自己编写程序
      • 变量名、函数名是否对上
      • 循环、条件分支是否得当
      • 输出文字时,大小写是否正确
      • 边界情况是否考虑周全
  • 调试

    • 输入数据格式是否正确
    • 样例数据所有分支依次跑到
    • 再次思考有无遗漏分支
    • 对拍:数据随机生成,与暴力程序相互验证正确性
      • 数据随机生成器
  • 空间、时间复杂度

    • 空间复杂度:sizeof(数组名字) 数组空间
    • 时间复杂度:clock:开始和结尾记录时间差、t1 = clock()、t2 = clock()
  • 注意控制单题解题时间,别一条道跑到黑

暴力分全拿
  • 写暴力、写暴力!,一定要正确的暴力!

  • 对于难题,依据题目数据分布、条件分布,确定是否可以枚举部分分支,得到部分分数

  • 确认是否可以打表得分

深呼吸放松,奇思妙想
  • 遇到特别难的问题,不要气馁
  • 遇到卡壳的情况,深呼吸,上厕所洗把脸,也许就会奇思妙想
  • 尽力就行,不要给自己太大压力

最后十分钟

全面检查

  • 命名是否和题目一致:程序文件名、程序中写的输入输出文件名 -> 必须一致,不一致就爆零
  • 程序存放的目录是否按要求
  • 输入输出格式与样例对照,特殊字符串(Yes,No,Impossible)的大小写
  • 数组空间的大小,对比空间大小限制

骗分导论

  • 骗分导论:打表 / 找规律 / 贪心 / 搜索 / 样例 / 无解 / 暴力+分段

参考

学习经验

学会总结

每周总结知识点:

  • 知识点原理、用途
  • 编程流程、关键代码、优化
  • 其他算法比较
  • 复杂度估计
  • 相应习题

看书:书是人类进步阶梯

安排时间:注重效率

  • 早晨:读书、总结
  • 编程
  • 中午:午休
  • 下午:XX
  • 晚上:继续编程

适当休息

  • 进入死角或者思维不清:溜达溜达,放松下,奇思妙想就来了

养成编代码的良好习惯

  • 重要的事说三遍:重视编码规范、重视编码规范、重视编码规范

学习心理暗示

  • 自己不会做:不要气馁,很可能别人也不会
  • 自己会做:不要骄傲,自己检查

做最好的自己就行,不要去管别人

学会抗干扰

  • 别看他键盘敲的快,题目未必做的对
  • 周围环境不适,学会适应

合理安排

  • 阅读题目:5分钟
  • 设计算法:10-15分钟
    • 第一印象思路:往往不是最优
    • 考虑
      • 复杂度(时间、空间)
      • 数据范围
  • 程序框架:5分钟
    • 分布:第一步干嘛、第二步干嘛
    • 每步拓展代码
  • 编程:20分钟
    • 静心写代码
  • 查错:10分钟

静态查错

  • 非常重要、非常重要、非常重要
  • 静态查错:先通读代码,找错误,在调试
    • 是否有编译错误?
    • 变量是不是打错了?
    • 数组开的够吗?
    • 分支是不是有遗漏?

测试数据

  • 各做几组测试数据

    • 小数据

    • 大数据:是否超空间、时间复杂度

    • 极限数据(边缘数据,比如0、1,除数为0,数组越界)

对拍

  • 我们还可以写一个效率低但是绝对正确的算法来和原程序进行对比

参考

\1. 没有使用头文件cstdio
\2. 没有使用文件输入输出
\3. 输入输出文件名错误
\4. 文件输入输出位置写错
\5. 文件输入输出语句英文括号全部写成了中文括号
\6. 文件输入输出语句中双引号写成单引号
\7. 函数名freopen写错
\8. 输入输出文件名读写模式错误
\9. 选手在xxx.in和xxx.out的前面都加上了.\,unix环境下评测编译错误
\10. 调试中文件输入输出注释了,忘记取消注释
\11. 强烈建议文件输入输出重定向用freopen()
\12. 使用变量定义数组: 如 int a[n];

  • 8
    点赞
  • 34
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

小码匠和老码农

喜欢作者

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值