备忘录
序
你可能一道题拿满分的把握都没有。
你可能出考场后发觉原来大多数人也都和你一样。
你可能在出成绩后发现有些和你一样的人成绩还很好看。
你可能在出线后觉得提高一等奖线也不过尔尔,如果你把你能拿的每道题部分分都拿满,你也能一等奖。
但你可能真的要再等一年了。
审题!审题!审题!审题!审题!
对拍!对拍!对拍!对拍!对拍!
那些年我掉过的坑
一、不该错的细节
-
忘开long long(十年 OI一场空,不开long long见祖宗)
-
循环分不清从1开始还是从0开始
-
数组开太小/越界访问(可能导致包括RE,WA,TLE,MLE,UKE在内的一系列玄学错误)
-
多组数据时记得初始化
-
注意运算符优先级 e.g.(a+b)%c时要加括号
-
long long的inf要定成(1ll<<63)-1
-
变量类型要选对
-
时间和空间复杂度要分析
-
注意memset对象(double不能memset)
-
没写return 0/文件读写
-
邻接表存图,双向边空间要开二倍。
-
变量名等注意大小写。
-
记得删调试代码!(我要这调试代码有何用!)
-
线段树节点数组要开元素数的四倍,lazytag也要
-
取模时有负数要+mod
-
注意a=b和a==b
-
多组数据记得初始化
二、思维与习惯上的陷阱
-
不要随便copy前面的代码!
-
想清楚边界状态!
-
函数名不能太接近。
三、隐蔽的深层bug
-
结构体赋值要么一个个拷贝,要么operator,不能直接写a=b。
-
string不能给没有用过的位置直接赋值,它是用一位建一位的。
-
手写单调队列要注意比较对象。
-
hash时注意首位不能为0。(否则会把诸如
aa
和aaa
这样的判成相同
技巧和注意事项
-
开
-Wall
和-Wextra
! -
学会写暴力,学会拿部分分!
-
/2
写成>>1
,%2
写成&1
,*2
写成<<1
备注: -
“无论何时,每行输出都以换行符结尾都是一个好习惯(即使只有一行输出的时候也是)”---StudyingFather
-
用特殊数据测边界(比如完全相同类,如100 100 …… 100或剧烈变化类,如1 100000 1 100000 …… 1)
-
草稿分区(如瞎写和重要结论分开)
学习方法
下沉式:哪里有洞补哪里
上升:自己读材料,做题升级
裸题-->模块内综合-->模块间大综合
自主探究学习
“思考时间和OI实力有关。如果刚入门OI,啥都不会,想多久都没思路,所以直接看题解就行了。而如果你算法已经熟悉了并且已经刷了大量的题,剩下的就是练思维了,就完全可以花几个小时想一题,因为这种情况大多数时候会不断发展思路,分析出越来越多的性质。实在想不出新的思路再去看题解,这样你也知道你之前的思路是卡在哪一步。”
“一开始可能做得很吃力,你可以大胆花几个小时搞一道题,实在搞不出来再看题解。不要嫌刷题太慢,刷一段时间自然思维能力就上来了。”
“推荐自己做出题目之后也看看题解,有机会收获新的思路。”
对于一个欲探索的问题,可从以下几个方面着手进行探索:
从简单问题入手;从具体对象入手;
从特殊情况入手;从问题反面入手;
从观察联想入手;从创新构造入手;
从形象直观入手;从情况分类入手;
从直觉猜想入手;从问题转换入手;
这就是数学解题之“术”。