原洛谷主页
记得:static。
让不会做的题变成会做的题,易错题变成必对题。
单数日学习,双数日做题。
渗透:
- 叫什么
- 地位
- 干什么
- 核心思想/原理
- 具体的原理+实现
我的 flag 们:
- \(7\) 月:黄题 AC 100。(达成)
- \(7\) 月:绿题 AC 50。(达成)
- \(7\) 月:自己做出一道紫题。(达成)
- \(7\) 月:场切一道蓝题。(达成)
- \(8\) 月:黄题 AC 150.
- \(8\) 月:绿题 AC 100,蓝题 AC 50,紫题 AC 10。
- \(8\) 月:AK 一场 Div.3,abc 场切 6 道题
- \(8\) 月:AK 一场 CF 比赛,任意难度。
- \(8\) 月:洛谷等级分 1200,CF rating 1300,AT rating 1000
已废除的计划:
-
周一:随机跳题,至少5道黄,1道绿。洛谷日报。
-
周二:如果周一flag没完成就补一补,更 blog。适当进行比赛补题。洛谷日报
-
周三:做这个,至少一章节。更blog。洛谷日报。
-
周四:做彩虹周赛,如果周三flag倒了就补一补。更blog。洛谷日报。
-
周五:学习深入浅出一章节,并完成一个题单中至少 \(70\%\) 的题目(向上取整)。洛谷日报。
-
周六:继续学习深入浅出一章节,完成题单。更blog。洛谷日报。
-
周日:适当对一周进行总结,补题,疯狂的补题,绿及以下的题必补,其余题看情况补。洛谷日报。
当然,如果有某一天任务过多,可以在任意一天补,但是当一周结束,必须完成一周全部任务。
需要打的比赛,请你自行安排时间:abc前5题,CF Div.3/Div.4/Div.2 前两题,彩虹周赛前 \(4\) 题,新手要求无伤 AK,如有洛谷月赛等等比赛,视情况参加。
快读:
inline int read(){
int x=0,f=1;
char ch=getchar_unlocked();
while (!isdigit(ch)){
if (ch=='-')
f=-1;
ch=getchar_unlocked();
}
while (isdigit(ch)){
x=(x<<1)+(x<<3)+(ch^48);
ch=getchar_unlocked();
}
return x*f;
}
inline void write(int x){
if (x<0)putchar('-'),x=-x;
if (x>9)write(x/10);
putchar(x%10+'0');
}
实战经验部分
1.检查空间。检查文件名。检查注释。检查调试信息。
2.考前多复习一点板子。
3.没啥特殊情况不要乱开 long long。
4.记得对拍。
5.多测记得清空。
6.如果有可能,尽量保证能做出 T1。
7.能用数组解决的事情一定不要开 STL(尤其是假装是 $ \mathcal{O}(1) $ 的 unordered_map)。
8.检查文件夹是否在正确的位置,注意文件输入输出不能写错。交上去之前要先编译一次。
9.有必要的时候可以用随机化骗一点分,注意退火参数不要写挂。
10.有能力的话冲一点高分暴力和特殊的暴力,如果数据强度低可能可以意外的得到不少分。
11.合理安排开题时间,最好用半小时先看一看题目和分数的分配。不要急着拿到题目就先开始写。
12.记得检查返回值类型,本机通常无法检查出来。
13.不要用变量 y1,会和 cmath 库冲突。
14.二分是 $ l \leq r $ 不是 $ l<r $,要注意各种边界条件。
15.注意不要忘记取模,检查模数是否正确。
16.最好多造几组数据对拍,特别是 corner case
17.使用负数做下标某些情况下可能正常通过编译,请注意越界问题。
18.无向图的空间是 m 的两倍。
19.注意位运算的优先级。
20.记得取模。
21.inf 要开足够大。但不能大到运算结果溢出。
22.如果你的代码是采用类似小数据暴力大数据正解的办法,建议把大样例每种数据规模和特殊数据都测试一遍。
做题 trick 部分
1.如果写 dfs 一定记得尽可能地剪枝。
2.如果能写入 dfs 状态的东西一定要写进去,最后检查是否合法的时候能省去一个 $ \mathcal{O}(n) $ 的复杂度,很多时候这不只是 $ 20 $ 分的差距。
3.注意 dij 和 SPFA,dij 不能处理负权边问题,而 SPFA 有时候会被针对。
4.如果 dfs 的深度并不固定,可以用判重的方法加速,往往比限制深度的 IDDFS 优越不少。
5.关于deque:建议手写,会爆空间,血的教训。
6.如果观察到合法的状态较少,可以考虑尽量只枚举合法的状态。
7.保证数据随机生成 往往是有用的信息,可以骗分也可以借此发现一些性质。
8.枚举子集不要 dfs,直接状压即可。
9.注意题目中某些极小的维度,通常很有用。一般是 $ \mathcal{O}(2^n) $ 或者是 dfs.
10.如果题目中出现 $ 2 $ 考虑转化为二进制。
11.很多序列问题都和逆序对个数有关。
12.多看数据范围,这不仅能保证题目不看错,数组不开错等错误,有时候能启发解法,比如某些维度较小或者较大。
13.尽量优化暴力解法的常数(如果有时间),有时候会有奇效。
14.不给多测的时候不妨自己造几组或者把样例粘在一起(不保险,建议从大到小和从小到大都试一次),多测清空不能memset,推荐的方法是写一个暴力对拍,然后把用到的所有变量在代码里丢在同一个地方,直接粘列表清空。
15.排列题答案取最大值。不妨退一退火或者用随机排列。退火我还不会。适用于相当一部分不是计数的最优化问题。
16.降低枚举量。这在某些题目很好用。
具体地,减少重复枚举和本质相同枚举。一个经典的例子是枚举数改为枚举数出现的次数。
-
注意输入格式不要漏掉,不然会挂的很惨。
-
线段树实现的时候,懒标记的部分好好想一想。
-
倍增记得处理好边界,不要漏掉。
-
看到括号题,尤其是匹配括号考虑拆括号的性质。
-
遇到不会的计数、统计题优先考虑拆贡献。
-
发现跳的次数或者变化的次数比较多且 \(n\) 适当考虑倍增和矩阵加速。

浙公网安备 33010602011771号