降智瞬间

我菜死了qwq

1、map的正确使用方法

map<int,int>M;
M[3]=0;
if (M[n]) cout<<M[n];
else puts("-1");

(调一晚上)

2、初值的正确选取

//值域1e18
ll ans=1e9;
rep(i,1,n) chkmin(ans,solve(i));

(省选挂40分,导致心态爆炸)

3、正确使用模数

题目没说\(gcd(n,mod)=1\)\(n<mod\)\(mod\in Prime\)就别瞎想!

(naive地认为自己切了题)

4、线段树合并的正确使用方法

一定要想明白k1为空时怎么办、k2为空时怎么办。如果想不清楚就尝试用树上启发式合并等暴力一些的方法。

(PKUSC挂100分,没约滚蛋)

5、矩阵乘法的正确用法

你就是生成函数学傻了不记得有矩阵乘法这种东西了吧!!

不能忽略\(n\)很大的时候除了瞎推式子还可以矩乘!

(被全机房diss)

6、区间DP的正确写法

大家都知道区间DP的\(O(n^3)\)做法是枚举断点。

但你不要忘了有些题可以只挪一步!

(模拟赛少39分,讲题时被公开处刑)

7、数据分治的正确写法

有的时候为了省事,可能读入放在一起搞定,然后再分暴力或是特殊情况。

然而,你的数组开的是暴力大小还是极限数据的大小呢?

(日常挂分,次数过多,记不来了)

8、右移的正确用法

有的时候int范围的数据为了拆出每一位,可能为了保险,一直搞到了32。

然而,你可知道,3>>32=3?(不开O2

你可知道,3>>33=1?(同样不开O2

你可还知道,3>>1048577=1?(同样不开O2

(模拟赛正解挂成60)

9、正确使用数组

你可听说过MLE这种本机编译通过、对拍拍不出来的东西?

交题前一定要检查空间!

(模拟赛60分变0分)

10、正确使用哈希

据说在串的个数大于根号的时候就很容易冲突了,就会爆了。

所以要双模数!

(模拟赛100变90)

uptdate:又一次模拟赛被卡掉了……我tm果然不长脑子……

11、正确使用STL

开1e6个map或set的时候会空间/时间直接爆炸……

(某大佬NOI挂100)

一个 unordered_map 存 2e6 个元素也会析构的时候时间爆炸,map 可能也是。

(一道破题调一天)

12、正确使用cin

由于对scanf读字符串怀有恐惧,我喜欢用cin。

然后模拟赛读1e6个字符串就被卡死了。

(模拟赛100变9)

upd:我又被卡掉了……我tm果然不长脑子……

事实证明 cin\(10^5\) 个长度为 \(10\) 的串,或是读 \(10^6\) 个字符,都是没法在 3s 里面跑过去的。

13、模拟赛正确时间分配

对于普通5h的省选模拟赛,可能我这种暴力选手不会有什么感觉。

但是noipCSP的3.5h的打法一定要注意时间!T3除非是最裸的暴力不然一定要给够时间!

(模拟赛多次T3爆零)

update:现在 4h 4 题就更容易爆炸了。

14、菜鸡的数论小笔记

\(x^{n}\equiv x^{n\% \varphi(p)+\varphi(p)} \pmod{p},n>\varphi(p)\),不需要\(\gcd(x,p)=1\)

(模拟赛浪费1h+)

15、sort的选择

当cmp函数不是\(O(1)\)的时候,可以考虑把sort改成stable_sort,可能会对常数带来不小的优化。

(完全一样的做法被卡TLE)

16、自适应辛普森积分

比如在积圆的面积并的时候,可能有一个很小的圆,摆在一个很大的圆旁边,而这个很大的圆的某一段刚好和二次函数非常相像,那么这个小圆可能就会因为没有任何一个 \(y\) 切到它而被忽略。

又或者是没有按 \(y\) 的连续段分开计算,可能坐标系中只有一个小圆,但是几个 \(y\) 都没有切到它,就直接返回 0 了。

所以要特判:只有在 \(r-l<1\) 的时候才允许返回,否则强行向下递归。 由于能辛普森积分的题应该一般坐标范围不会太大,所以应该不会导致复杂度升高。

17、多组数据清空小技巧

多组数据,有时需要提前退出时,最好写个 clr() ,再 #define GG return clr(),puts("-1"),void() ,防止自己退出时忘记清空并爆零两行泪。

18、STL 的正确使用方法再放送

定义大概 \(10^6\) 次 queue 已经可以用到大约 1s 时间,如果复杂度是 \(O(n^2)\) 的最好手写。

emplace_back 有时会比 push_back 快很多。

vector 的 clear 操作并不会释放空间,所以可能会莫名其妙地 MLE 。

19、记得取模

计数时,如果把方案数直接设为 \(n,l,r\) 等数,一定要记得取模。

20、神必精度误差

(long long)(1e18+5) 会返回 \(10^{18}\) 而把 5 吞掉。。

21、多次 BSGS

用脚指头想一想都可以想到复杂度是 \(O(\sqrt{Tmod})\) 而不是 \(O(T\sqrt{mod})\)

22、多组数据特判

读完!读完!

2021.5.20 我做梦都没想到临近退役我还能再犯一次这个错误。

23、边分治

虽然没错过但还是要记一下。

三度化的时候会把一个点的儿子挂在一条链上。此时就会存在一条路径经过了这条链并进入了两个儿子的子树,但是并没有把父亲点的贡献计入。

所以在贡献是关于点的时候边分治还是要三思而后行。点分治+哈夫曼树可能会更好使。

24、正确使用 vector

因为 vector 神必的空间分配方式,一次 push_back 之后原来所有的指针/迭代器可能都爆炸了。

posted @ 2019-05-06 20:42  p_b_p_b  阅读(2314)  评论(0编辑  收藏  举报