你好,游客 登录 注册 搜索
背景:
阅读新闻

信息学竞赛经验介绍

[日期:2019-10-28] 来源:  作者: [字体: ]

A考前阶段 

1、提前15分钟入场,利用好这几分钟的时间,做好准备工作。

2、静坐调整心态,适当的深呼吸,不要紧张、坐立不安等。

3、设置编辑器IDE:

i.默认路径

ii.窗口大小

iii.TAB宽度

iv.编译功能

v.重启

IDE

i 你喜欢的屏幕分辨率。

ii 平时惯用的字体。

iii 字体大小不要太小方便查错。

4、准备文件:

i.创建.in .out。

ii.建好模板(头文件,输入输出)

iii.测试模板准确无误

a. 同时注意文件名,保存要求,目录结构

b.某些省份(如 河南)要求同时提交.exe文件,注意不要漏交。)

5、休息|再次调整心态:不要去想结果,只看过程,努力了就一定不会白费。

B看题阶段

1、不要急于看内容,先将试题第一页的时间、内存限制等等一字不落地看完。

i 虽然1s+128MB内存 (这是以前的了,现在应该是 1s + 256MB) 是标准配置,不过也不是每道题都是这样的,还是请认真阅读试卷首页的试题说明

ii. 计算内存的方法:数组大小*类型长度/1000 / 1000=所占内存MB数,int(Pascal:longint)类型长度是4, long long (Pascal: int64) =8

iii. 记不住的话,记住int (Pascal: longint) 型数组在128MB内存下最大开到2500 0000是比较保险的(占100MB内存)

2、开始看题,看题时不能走神。重新描述并将题目抽象化简,提出主干信息。

读的时候积极思考,看看这某句话到底是个什么意思,要会转换。比如对于有时间的问题,到底把时间看成一个点,还是一个区间。

3、结合样例看题目,确保自己题意理解没有错(如果样例错了回到上一步修改主干信息)。

具体题目具体分析,一定要符合题意。题没读懂就开始做,100%是错的。题错,思路也就错,时间浪费了, 数据还是1个都不过。

4、看完题目后将其归入某几个框架中,包括:模拟/枚举/搜索/贪心/动态规划/图论/分治

5、根据输入数据的范围大致确定算法复杂度,以下均是可能情况,不绝对:

20:2^20=一百万,O(2^n),搜索

100:100^3=一百万,O(n^3),Flody/APSP/搜索

1000:1000^2=一百万,O(n^2),动态规划/图论

500000:O(nlog(2,n)),二分答案/二分查找/快排/归并

1000000:O(n)或O(1),数学问题/改变思维方向/贪心

C写题阶段

1、写下代码前,必须保证有充足的思考时间,有成熟的想法后再动手

所谓Think Twice, Code Once, 一定要想好了算法,思路清晰了再编。

对于稍难得题目:分析问题时遇到一些即兴问起的情况,马上要深入下去,看已有的算法思路是否有问题。经验证明,这种即兴提起的问题往往是决定算法正误的关键问题。这是一种本能的质疑,本能的差错,一定不要想:我一会再来看这个问题。一定要立即想清楚,看算法怎么样处理才能解决这样一个问题。确认算法没有什么错误了再编。如果思路没清晰,算法不对,编到一半时才发现错了,这种情况没有考虑到,浪费了很多时间,或者编完了都还不知道算法是错的,最后由于样例特殊,过了样例,以为对了,但实际上只得10分,或者根本不得分。

对于简单的题:也一定要考虑全面,不是编好了程序再来考虑全面,而是想算法的时候就要考虑全面。不要知道个大概就开始写,后来发现一些特殊数据要作特殊处理,又把程序改过去改过来,改得面目全非,最后老是改不对,不但影响心情,而且还是错的。

总的来说:想好算法,写下各个变量的意义,明确使用的时候都是遵照这些意义的。写下关键的句子,分清各种情况,这个阶段最重要,一定要仔细,不要急着编程。理清了思路再编程,写好了关键句子再编程,弄清楚了变量再编程,速度会很快,而且正确率也很高。很多人就是犯不思考就编程这个错误,最后自己就昏了。于是浪费大量时间,而且题也做不出来。

2、不能想一点写一点,就算是输入部分也要在整体思路理清后再写。

3、写代码前,尽量用多而强的数据去测试想到的算法,毕竟代码写完后再测试就浪费很多时间了

思考算法的时候,一定要考虑到特殊数据,或一些特殊情况。写完了,还要再看各变量是否带对,是否有笔误。

写完后也要:自己设计几组数据,争取卡死你的程序。如果你已经设计不出能卡住你的程序的数据,恭喜你可以做下一题了。

4、永远别去写从未接触过的算法/数据结构(考场上), 同时减少负优化。

i.在内存允许的情况下,能开普通队列就不要用循环队列,能开下普通数组就不要用滚动数组

ii.在时间允许的情况下,能暴力就暴力,高精度能不压位就不压位,优化不需要的就不要

iii.总之,在不超限制的前提下,能不优化就不优化,以减少代码量和出错概率为第一原则

5、如果想不到思路,试着找规律。纸笔都是好的伙伴。

i. 即使这道题看起来再没法做,也不要提早放弃,这个时候纸和笔会是你最好的朋友,自己尝试几个例子,也许你就会找到答案

ii.如果这是一道动态规划题,请先把转移方程写在纸上再编程

iii. 涉及到边界处理、加一减一之类的问题,请在纸上举个例子,标上下标以后,在编程时参照纸上的下标写

6、如果实在想不到思路,就放弃。

i. 如果思考30分钟仍一头雾水,没有可以实现的算法,请你果断屏蔽掉100%的那一栏数据,开始写60%,50%乃至30%的算法——在NOIP里面,30分绝不是小数目

ii. 不要因为一道题的时间丢了后面题目的分数。

iii. 看题要灵活,不要绊死在一道题,不要怕。NOIP的题不想就做出来,怎么可能,肯定是需要想的。但是最好先写好写的题,不一定是前两道题。其实很多时候你是有能力做起的,只是你一看就怕了,也没有去认真想,随便敷衍想了一点特殊情况的算法,认为可以骗到分。但经验证明最后基本是没有分,即使有,最多不过10。时间是3个小时,要积极一点,经验证明,很多题想到一定时候便想出来了。并且很简单。

7、心态

i. 如果你发现你旁边的人写得很快,请你放心,他的算法十有八九是错的

D写完阶段

1、程序按照思路编完之后,查编译错误。经验证明,刚刚完成的程序不出编译错误的几率基本为0。

2、编译全部修正后,千万不要测样例。一定是必要的调试手段。经验证明,第一次就把样例过了的几率很低,即使过了,在测自己的特殊数据的时候也会出错。所以,编译完后一定要静态查错。经验表明,静态查错是很有效果的。基本上每次静态查错都可以找到变量代错的错误。特别是快排的I,J是否带错,DEC,INC是否搞错,SWAP是不是加了VAR等等。

试想:

i如果没有静态查错,就去测样例,如果程序有错,样例不过,影响心情;

ii即使样例过了,因为程序有错,特殊数据也不一定能过;即使特殊数据也过了,程序有错,评测的时候绝对会错。

iii那还不如一开始就静态查,即使发现错误,获得成就感,心情很好。

iv千万不要慌着去测。要保证程序无错,思路清晰,结构清晰了,然后再去测样例,再去测特殊数据。

样例过了不要得意,特殊数据过了不要得意,很有可能还有很多特殊情况你没有想到。

3、如果程序错了需要调试,一定要分模块调试,不要从头跟到尾。【具体转调试技巧】

4、有多余时间一定要进行对拍,即3个程序:生成数据、朴素算法、准备交的算法

5、交之前5-15分钟千万不要再改动代码,主要留意代码中是否还有测试程序时留下的痕迹。

i. 即使你怀疑它对你的一个输入给出了错误答案,因为你自己算出的结果也有可能是错的

ii. 这个时候请你检查是否注释掉了该注释掉的东西,文件名是否写对,文件夹是否建对,请一定反复检查!

E结束阶段

1、走出考场后,除非已经是Day2,永远别对答案 (个人建议)

2、做好心理准备,也许做了两道自己认为会全对的,还做了一道自己认为能过几组的。可能只得50。这也是有过的事情。除了做好那几个步骤,没有其他的办法。认了吧。搬块石头砸天,也是没有用的。

3、树立正确的成败观。体验第一,拿奖第二。往往能从失败中学到更多的东西,得到更多的感悟。成功固然好,失败也不错。成事在天。做到了自己做到的,就是另一种意义上的成功。

收藏 推荐 打印 | 录入:admin | 阅读:
相关新闻      
本文评论   查看全部评论 (0)
表情: 表情 姓名: 字数
点评:
       
评论声明
  • 尊重网上道德,遵守中华人民共和国的各项有关法律法规
  • 承担一切因您的行为而直接或间接导致的民事或刑事法律责任
  • 本站管理人员有权保留或删除其管辖留言中的任意内容
  • 本站有权在网站内转载或引用您的评论
  • 参与本评论即表明您已经阅读并接受上述条款
热门评论