2017暑期训练小结

新一次的Noip即将在11月11号举行,这一次的Noip对我们也是十分重要的,毕竟是初中阶段的最后一次Noip了,也应该给自己的初中oi一个完美的结束。

这一次的Noip我们这个暑假要努力的练习,但是也应该不止练习。

首先,我们应该好好地分专题做题。我打算这一暑假及开学后到Noip之前的这一阶段,按这样的顺序练习:

模拟与暴力——动态规划及递推——分治——贪心——搜索——高精度——栈和队列——数学——树和图论——其他实用的瞎搞技巧

这里的每一个算法都是比较重要的。哪怕就是最后的瞎搞和暴力算法,也是十分有用的。yql大佬曾经在上课的时候给我们算过,对于Noip2016的提高组,就算什么高级算法都不会,仅用暴力,就可以得到400-500这样的分数。

再其次,剩下的是一些比较基础的算法。这些算法必须一一地过关才行。瞎搞与暴力虽然可以让我们拿分,但是毕竟这些不是正道。我们还是应该打好基础,把这些基础算法都学好,一一巩固,不然也走长久。

现在的几个月,每天都应该编程不少于3小时,好好巩固基础!

同时,还应该提高自己的正确率。否则,就算设计完一个程序,即使能想出来算法,却在很多地方写错了,还不如暴力骗分拿的分多。那么应该如何提高正确率呢?我在这里总结了几点:

  1. 写完一个程序以后,不要急着去测试样例。一般的样例都是很弱的数据,也会有很多特殊性,通常情况下,即使样例测过了,然而程序却不一定对。而样例过了,反而容易让人放松警惕性,轻易地就把这道题放过去了。

  2. 静态查错
    这个非常重要!静态查错的时候,应该去考虑一些问题。比如,(以下都是亲身经历总结,可能不全)

    • 我们min,max的初值是否可以算作INF,会不会有数超过它?
    • 我们对一些变量进行初始化以后,会不会导致这个变量因为一些运算而爆了变量范围?(主要是图论)
    • 中间变量以及答案会不会爆int?如果是必须,就用long long。会不会爆long long?同样,如果是必须,就要用高精度。但如果不是必须,就想方设法避开这个变量。
    • 有没有漏考虑一些条件?输入的变量是否都用到了?(如果实在用不到我也没办法)一般输入的变量肯定有用,不然一般是算法有误或不是最优。比如Noip2016普及组倒一,输入的n看似没有用,其实它是最优化算法的一个十分重要的变量。
    • 有没有考虑到一些特殊情况?有些特殊情况可能不适用这个算法,需要特判。
    • 数组开够了没?比如对于无向图,邻接表要开两倍;对于线段树,tree数组需要开到4倍;对于大多数倍增算法,LOG开的够不够;对于归并算法,数组要开两倍。
    • 变量或数组初值赋了吗?
    • 负数问题?可能出现负数吗?这会影响读入优化,会影响dijkstra算法,负环会影响SPFA等等。
    • 在这里做这个操作真的合适吗?
    • 变量名有没有打错?
    • 对于多任务的问题,初始化完整吗?上一次的哪些变量会对这次有一影响?比如ans,tot,cnt,head数组,visit数组……
    • ………………
  3. 对拍
    对拍可以用来检验程序正确性。写一个有正确性保证的算法(比如暴力算法等)制造测试数据来测一下自己的程序。

此外,写完一道题以后可以试着来写些解题报告。这样可以提高自己对算法的认识。
差不多了,总之这个暑假应该扎扎实实地练习,提高正确率,争取在Noip2017取得优异的成绩。

posted @ 2017-08-01 10:37  hankeke303  阅读(229)  评论(0编辑  收藏  举报