之前用洛谷的剪贴板记录的警钟,现在把这个搬到这顺便整理一下。
不是很准确,有时你TLE了可能会显示成WA。
不要觉得AC的点很多了,你代码的错就很小(细节),说不定是数据点太水,自己代码错的离谱(
WA
__builtin_popcount()
只会返回最后32位中1的个数
遇到数据范围像 $1\le n\le 2^{63}-1$ 这样的数据范围就最好用 ull,否则你就可能遇到 log2(n+1)
这样的【】
通常分类讨论的每一类得到的公式都很对称或几乎一样,但是千万不能想当然!!100->0
dSir 的样例很水,尤其是那种上古老题,答案对了但是中间的过程可能错的很离谱,所以一定要把中间的过程输出出来看看!!!(j 写成 i + 忘记判断是否>=0 = 样例过了但是10分)
C++在处理整形除整形是并不是默认向下取整,而是向0取整,这就导致当你想对负数向下取整时不能直接这么写,你应该写成 abs(x)/abs(y)*(x/abs(x)*y/abs(y))
,x/abs(x)*y/abs(y)
需要加括号是因为怕直接乘 x
会炸。
不要轻易的写下任何一个字符!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
首先 double 的最大值大约是 1e16,所以当你想将 long long 转成小数时,请使用 long double,其次,为了方便我们一般使用 n/2 自动向下取整,使用 (n+1)/2 自动向上取整,但如果你在前面还乘上了一个 double,请考虑为其加上括号!否则这就是一个数论题好不容易推出了公式结果没有AC的悲惨的故事。都怪 dubble!
c++在编译时会对程序语句的执行顺序进行优化,所以在面对段错误之类的不好确定问题位置的问题时,不要太依赖 输出信息定位问题 的方法,很有可能在出问题的语句后面的语句先被运行了,才运行的出问题的语句。
char o=...;for(char j...){...}
然后丝毫没有意识到for循环里用的是o没用j。
默认大样例文件中的前几个就是pdf里给的样例,于是就没测,然后还是CF赛制,于是100->0。
在二分或一些算法时,若l,r<=2e9,此时虽然l,r本身不会炸int,但是计算(l+r)/2时l+r有可能会炸掉!
仔细的分析每个变量是否要开long long,在给一个变量赋值时都应该去考虑long long的事(ll x;y=x忘记开ll!)
每次循环更改变量的值,循环外忘记将变量值还原,100->30,哈↘哈↘
忘记判断是否为正整数,我珂癌的捆绑测试!
a,b两个数组要排序,但是写了两个sort(a)……
不开long long,不开unsigned long long。
dp状态转移f[l][r]=max(f[l][r],…)写成f[l][r]=max(…),成功的浪费了一个小时
离散化,如果答案输出的是被离散化的值,切记要把他们转换回原来的值,不然你会100->0。
+=
写成 =+
,==
写成 =
。
计算出的值都对,但是最后忘记无解时输出-1
输入有可能有负数,dp忘记memset(dp,-0x3f)了
输入错误,应该是 for(...)cin>>a[i]>>b[i]>>c[i];
,写成了 for(...)cin>>a[i];for(...)cin>>b[i];for(...)cin>>c[i]
不看数据范围,数组开的太小了。第二次看了数据范围还把数组开小了,警钟敲烂!
有的时候为了破环成链,dp等数组的下标需要多开一倍才行,否则对拍也调不出来。
眼瞎没看见句号+眼瞎数组开小+没把调试信息注释掉,痛失240分啊啊啊。
比赛一定要看大样例,警钟长鸣。
将 I
看成 L
,然后就全WA,警钟敲烂!(所以题目给的字符串都去复制,别自己敲)
写了两个 dfs 的函数,第一个叫 dfs,第二个叫 dfs2,然后 dfs2 调用成 dfs 了!!!!(问:此处的感叹号表达了作者怎样的心情)
目问的是最多删掉几条路,给写成了最少留下几条路
多组数据,第一次是忘记初始化,第二次是没全部初始化。直接0分,警钟敲烂啊啊啊
删掉一层循环,然后break忘记改成continue
遍历图的时候,遍历的起点 𝑠s 忘记记录是走过的。(𝑏𝑠 忘记赋值为 true)
拓补排序时候入度搞错了:𝑢 点不能给别的点贡献“值”时就走不到别的点了。具体
多打了个加号,100–>0。
函数参数传的是char类型,但是参数定义的是int类型
模版题,输出格式错了,空格写成endl,100–>30。赛时直接崩了艹
题目没说a.size()=b.size()。不要想当然
ABC346 不开longlong白吃4个罚时
在做区间dp时,如果枚举len,有的时候可以枚举长度等于1的区间,但有时候枚举长度等于1或者更长的区间时没有意义的。不要不管怎么样都len=1~n.
快速幂刚开始记得把a取模不然a*a会爆int
对于有关一个点的权值(u)的时候,如果我们用的是“输入(x,y,u),给(x,y)这个点上的权值增加u”这种输入方式,记得记录一个点的权值时应当在原有的基础上加上u,而不是直接把他赋值成u,具体。
循环内找到一个解后忘记break,导致一个物品被重复利用多次。
如果set(或multiset)存的元素是一个结构体(Node)时,需要用operator<重定义这个符号,但是这个函数中需要比较Node中所有的元素。例如有两个值a和b,但是如果只比较(Node)x.a和a的值但是整个函数内没用用到b(即比较与b无关),那么set会将两个a相同的结构体当成同一个结构体处理,例如se.insert({2,0});se.insert({2,1});,那么此时se.size()==1,se中的最后一个元素的b==0;
当用到能排序的STL(如优先队列,set等)时,在结构体(Node)内重定义小于号(operator<)的函数内保险起见不要使用外部的任何变量,否则当我们修改外部的变量时,整个STL并不会重新排序,如果你是按照这个变量来给整个STL排序的那么修改后整个STL的顺序就乱了!所以如果你使用了外部变量作为关键字,请在修改前将这个变量对应的元素先pop(erase,pop_back等)出来,然后修改完后再push(insert,push_back等)回去!因为这一个点导致痛失70分啊!直接从第3名掉到10名去了!!!!
dfs统计答案,因为某些原因,一些点会被重复的遍历道,但是统计答案的时候没有判重!!!赛时随便想了想感觉没有重复的然后就不管了。三思而后行啊。这回更痛,挂了75分,从第4掉到第12!
在C++中,运算“不具有交换律”,例如,你可以(string+char),但是不能(char+string)。
TLE
n=1e6输入不用scanf
二分模版,l=mi+1
写成 l++
,幸运的是这玩意儿不会WA,TLE 100–>60。
MLE
线段树MLE,数组忘开四倍。
RE
没考虑到除数/模数是 0 的情况(有时是RE有时是TLE)
我打ABC357,D取位数时开了log10,交了11次还没过,赛后直接WA哭(所以能不用double类型的函数就尽量别用)
应该是能不用STL就不用STL(
警钟:VectorTLE的代码用forward_list就能够通过评测机波动ac
线段树(2e5+1)乘4写成 2e5乘 4痛失550
去年s组第二题mle没分160->135