首页 > 技术文章 > 致后来者——长梅Oiers(隐藏帖)

Qihoo360 2019-12-21 20:48 原文

我是长梅高2018级的一个蒟蒻,在\(CSP2019\)中压线拿了一等奖,宣告退役。
这篇文章主要是分享一些经验,给那些以省一为目标的长梅\(Oier\)们。

先来看一组数据:
2017年长梅9个省一
2018年长梅7个省一
2019年长梅2个省一(新高一和初中没有一个人,而且几乎都是100出头,距离遥远)
为什么今年状况这么差?
首先人数少了一点,但这不是一个省一都没有的理由。

\(CSP2019\) Day2 T2 划分(partitioin)
是我们考前几天才考过的原题,除数据范围外题意完全一致
而且我记得那次考试这道题几乎是人均切的,因为某同学在网上搜了题解并在机房中共享。
虽然联赛中数据范围大了点,但用我们考试原题的\(O(n^2)\)做法可以获得64分。
然而这题只有我一个人拿到了这64分实现翻盘
这体现了什么不用说也知道。

下面列举几个我们这届做的不好的地方:
1、由于WiFi"CJMXH"的存在,全机房考试的时候都是有网的,虽然据我所知几乎没有人利用网络搜索题解(上文是个别例外)。
2、J哥经常不在,考试纪律不严明,会出现上午下午各考一套结果晚上9点一起交的情况。
3、J哥不在的时候,几乎每次都是实行IOI赛制,所以每次考试分数普遍较高,很少有翻车现象。
4、颓废现象(即你们所说的腐败,建议弄清词语意思)。

所以给你们的建议就是:
按照考试要求来,按时交,只交一次。
1、不要说什么变量名打错了数组开小了之类的问题,平常考试一次没考好又不会怎么样,要努力适应OI赛制,在你有资格参加IOI之前。平常的考试都是为联赛做准备的。
2、关于颓废,个人认为这个是信竞通病,难以避免,主要是要把握个度。我们这届是有一个“合法腐败时间”(17:1518:45),期间是可以干你想干的事的。你们可以向J哥商量一下。如果不行,在保证不被抓的情况下定个时间偷偷玩~总之,该学的时候不要颓,其实当你专注于学习一个算法的时候,是能找到趣味的。这是我的博客,看那一竖列标签,很多都是出于兴趣学的,对联赛作用不大。

然后进入正题,怎样拿省一?
首先一定要明确,拿省一绝对不是一件难事,所有基础扎实的人都能拿。
从2016~2019年,没有一年是只写暴力拿不到省一的。
就拿2019年为例,
day1t1 水题必切,不小心丢5分也可以理解。
day1t2 暴力30~50,按30算
day1t3 纯暴力10
day2t1 纯暴力32
day2t2 纯暴力36
day2t3 暴力40-55
按最坏情况算95+30+10+32+36+40=241
省一线231,而且2019年获奖比例只有20%,而往年都是25%左右。
所以一定要保持自信,不要因为哪次考试考砸了甚至爆0了就气馁。

然后是一个重要性排序
基础>应试>进阶
为什么应试如此重要?
csp2019day1中,我把前2题的100分做法都写好了,此时还剩下70分钟。
我此时在犹豫是要对拍下t2还是去肝t3,然后J哥在车上的话“不要对拍,过大样例就行”使我选择了后者。
结果t3没肝出来,就连10分的暴力都没时间写了,最后2分钟匆忙的检查了下文件名,过了下编译。最后day1t2因为sb错误爆0了。
还有day2t3因为多组数据数据没清空,少拿了15分,本来55分是人人都能拿的。
今年我把错误的应试技巧演绎的淋漓尽致,多亏了那道原题才让我保住了1=。

\(OI\)赛制下,代码写挂是很常见的事情,这个时候就很考验应试技巧了。
千万不要相信大样例,对拍是查错最有效的办法。
对拍即用暴力和你的更好的做法比较答案,在保证暴力没写错的情况下可以检验你的方法是否出错,对拍的脚本可以参考这篇文章
要明确,对拍的代价并不大,生成一个图、一棵树都是非常容易的事,5分钟左右就能完成,生成一个数列更是轻松完成,加上对拍脚本总共也就10分钟的时间。而这个10分钟,能让你稳住省一
无论如何,先把每道题的暴力写好,即使你可能会正解,就算会做,也一定要对拍,过了大样例就不管了的事千万不要干。
其次,写一题提交一题。最后半个小时还有题目没有思路的话不要想了,赶紧把暴力打上。最后10分钟不要写题目了,把你写了的代码都从头到尾检查一遍,过一遍思路,检查一下有没有数组开小之类的问题,最后检查一下文件名。
还有就是,进考场还没发密码的时候,就可以先把对拍脚本和生成一颗树的程序,还有一些模板写好了,考试过程中一定要抓紧时间,集中注意力,有时候时间真的很宝贵。

最后想说的,就是可以自行学习一下以下按照进度不会学,但易懂、有用的算法(所谓的有用是指联赛中一定不会出正解是该算法的题,可能正解用基础算法几经周折可以做出来,但如果你用高级算法就可能成为一道模板题)。
1、线段树(其实这应该是必备的数据结构了)
2、主席树(代码短,易理解)
3、树链剖分(易理解)
4、莫队(用于拿更多暴力分)
5、模拟退火(可在能拿的暴力分之外尝试使用)
6、Splay(学会一种平衡树可能派上用场,这是最简单的)

最最后,附一个必学算法表
1、基本算法:贪心、递推、递归、分治、二分、三分、差分等
2、高精度
3、搜索:回溯(深搜)、广搜、A、IDA(重要,建议多积累点经验)
4、DP(经典DP题一定要都刷一遍)
5、倍增(ST表、LCA必会)
6、离散化
7、哈希、KMP
8、会用STL中各种实用的模板
9、基本数据结构:队列、栈、并查集等
10、单调队列(常用于优化DP)、单调栈、堆
11、树状数组
12、基础图论算法:最短路、最小生成树等
13、拓扑排序
14、差分约束
13、树的重心、树的直径(树是图论中相当重要的一个分支)
14、简单数论:排列组合、扩展欧几里得等(看一遍进阶指南就行了)

如果有什么问题欢迎联系QQ819324044

推荐阅读