花样丢分集锦

我菜死了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\(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)

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\) 的时候才允许返回,否则强行向下递归。 由于能辛普森积分的题应该一般坐标范围不会太大,所以应该不会导致复杂度升高。

你可能感兴趣的:(花样丢分集锦)