您的位置:首页 > 其它

NOIP赛前模拟总结

2016-11-17 17:21 183 查看

前言

NOIP虽然是一个比较基础的赛事,但是十分的重要,失足千古恨……

所以,就需要NOIP赛前模拟。

在这么多NOIP模拟中暴露出来的问题很多。

所以就需要总结。

问题归纳

对拍

作为一个Oier,必须要会打暴力,比赛时候每道题都要打暴力,也就是说每题都需要对拍—->

1、不对拍,会非常的虚,对后面的心情影响很大。

2、一次性答完题的漏洞一般不会为零。

3、一般对完拍之后,这道题目就稳了(因为两个程序同时打错的概率很小)。

那么要怎么对拍:

1、打完一题就立刻对拍,不然对后面的影响很大。

2、从最暴力的(或最短的)拍开始打起,一般会程序的漏洞会随着能切的分数成正比。

3、如果正解实在打不出来,可以用把拍优化到最大限度交上去。

4、拍还是可以对分的,这是很好的保险。

空间

上限

那么辛苦的程序打出来的程序,如果爆了空间,那么一切为零。

long long要乘8,int 要乘4,bool要乘1,char要乘1,所有的加起来除以(1024*1024)小于上面给出的那个东西,就可以了。

下限

开小了也是不行的:要注意的是bfs的队列倍增数组后面那一项线段树真的要乘4(实在不行用一个高级的方法是乘2的)、桶的大小顺着的DP开滚动质数判断数组无向图的边集数组……注意看看范围。

必须要注意!!!!!!!!!!!!!!!!!!

时间的计算

理论上说,一秒是可以跑1亿次的(常数也要考虑进去),但是一般常数的代码下实测只能到50000000次左右。

首先

看最大范围,思考自己程序的时间复杂度:

1、在5~100,奇妙的暴力,时间不可估量。

2、在5~10,有可能是n!的方法。

3、在10~25,有可能是2n,比如说状态压缩DP。

4、在50~150,可能n4也可以过,要有梦想,注意常数。

5、在100~500,考虑一下n3,这种情况下要握准,可能梦想并不可靠。

6、在500~1000,看看有没有n2带两个log的算法,比如二分套二分,三分,链剖、LCT……这样的题很少。

7、1000~10000,n2是很有可能的,注意有些暴力除以2的,那么可能1000∗10002是过得了的。

8、10000~60000,nn√最喜欢这种范围,像什么莫队、根号算法的筛……

9、60000~100000,nn√logn有可能跑得过,比如厉害的莫队。

10、100000~300000,nlog2n是可以的,像什么三分之类的。

9、100000~1000000,nlogn这样的算法很多,但是要注意n1+n2+......+nn=nlogn这个可以一换掉根号的筛。

11、1000000~50000000,过了一百万,带一个log就很危险了,现在就要思考O(n)了。

12、500000000~263−1,现在这么大的范围一般都是O(logn)的,比如说矩阵乘法……

时间跑的慢,可以用一个变量去在程序中不断的+1,来看看到底是哪里跑的慢,针对一下。

像一些求最优值的暴力,如果运行次数大于一个阈值,那么就不运行并输出当前的最优答案,因为过不了也就过不了,为什么不碰碰运气输出看看对不对?

常数的优化

常常跑出来的时间和自己预计的不一样,一般都是常数太大的结果。

1、如果最后要mod mo,如果是加法的话,如果≥mo,那么就-mo,这样常数会小一点。

2、max最好自己打

3、除2,用用位运算

……….(NOIP能用到的机会也不多)

思路要清晰

有好几次题目都是,第一眼想到了一个方法,然后想都没想就直接打,结果打了半天发现是错的。还有一次明明方法是对的,结果不小心打错了就放弃了这个方法。

事发原因:对于解题的思路不清晰。

解决方法:

1、想题的时候,就把思路的流程写下来。

2、如果得出来的是结论,那么一定要在草稿纸上先用数据(或用证明)结论的正确性,然后再打。不要想着用正解去证明结论,这样错误的概率很高。

3、如果有些草稿纸上得出来的结论很难证明,可以尝试用暴力去算一算(手算可能会出错)。

4、用数据去模拟一下流程,然后再打题。

把握时间

虽然只有三道题目,但是只有三个半小时,又要看题,又要想题,又要打正解,又要对拍……如果不把握时间,挂掉的可能性会很高。

1、NOIP一般想题结束要用20~30分钟会比较稳,想的时间太长打题会很虚(调程序是很浪费时间的)

2、做完第一题,正常的情况下。对于我来说是比赛经过了50分钟左右(从8:30开始就是到9:20~9:30左右要做完第一题)

3、做完并拍完第二题最好是10:10~10:30这段时间,因为只留一个小时做最后一题明显是不够的。

4、在最后一小时要预留10~15分钟的时间检查,不要把时间逼的太紧,因为越接近结束时间就会越紧张。

最尴尬的情况就是打到第二题中发现第二题的方法是错的,那么就要重新想(这样会不清楚时间的流逝),所以要不就是一开始就想好,要不就是在上面计算的时间内结束做题,这样能比较好的把握时间。不能因小失大。

如果最后一题真的比较难做,一定要保证前面两题稳稳的情况下再去打第三题的正解。

保持心态

1、需要对拍

2、想题是要稳

3、需要把握时间

4、如果脑袋真的有点累的话,那么就懒懒的调试一下(或再去对对拍),这样很舒服。

不可错之错

1、文件名打错——刚拿到题目的时候就把所有要建的文件建好,所有文件名打好

!!注意:文件名的大小写,空格之类的!!

2、c++程序不能开奇奇怪怪的库,不要把出数据的ctime库开过去。

3、出数据的自己打一个可以出大数据的函数。

4、结尾打return 0

5、多组数据要清空

6、不要受旁边人的影响

7、不明白的要问

8、分段的地方要明确,最后打个下划线标注一下

RP++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: