我菜死了qwq
1、map的正确使用方法
mapM;
M[3]=0;
if (M[n]) cout<
(调一晚上)
2、初值的正确选取
//值域1e18
ll ans=1e9;
rep(i,1,n) chkmin(ans,solve(i));
(省选挂40分,导致心态爆炸)
3、正确使用模数
题目没说\(gcd(n,mod)=1\)或\(n
(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)
12、正确使用cin
由于对scanf读字符串怀有恐惧,我喜欢用cin。
然后模拟赛读1e6个字符串就被卡死了。
(模拟赛100变9)
upd:我又被卡掉了……我tm果然不长脑子……
事实证明 cin
读 \(10^5\) 个长度为 \(10\) 的串,或是读 \(10^6\) 个字符,都是没法在 3s 里面跑过去的。
13、模拟赛正确时间分配
对于普通5h的省选模拟赛,可能我这种暴力选手不会有什么感觉。
但是noipCSP的3.5h的打法一定要注意时间!T3除非是最裸的暴力不然一定要给够时间!
(模拟赛多次T3爆零)
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\) 的时候才允许返回,否则强行向下递归。 由于能辛普森积分的题应该一般坐标范围不会太大,所以应该不会导致复杂度升高。