NOIP赛前模拟总结

前言

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的,那么可能 100010002 是过得了的。
8、10000~60000, nn 最喜欢这种范围,像什么莫队、根号算法的筛……
9、60000~100000, nnlogn 有可能跑得过,比如厉害的莫队。
10、100000~300000, nlog2n 是可以的,像什么三分之类的。
9、100000~1000000, nlogn 这样的算法很多,但是要注意 n1+n2+......+nn=nlogn 这个可以一换掉根号的筛。
11、1000000~50000000,过了一百万,带一个 log 就很危险了,现在就要思考 O(n) 了。
12、500000000~ 2631 ,现在这么大的范围一般都是 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++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

你可能感兴趣的:(noip,总结)