关于奇奇怪怪的bug
Math_rad_round · · 个人记录
前言
这里记录了一些做题时匪夷所思的BUG
2020-3-28
为什么洛谷会卡return 0 ? P3919可持久化数组
这道题本身完成用了30min,结果疯狂RE 代码
没错,我最终调了60min后加了三个return 0 代码
就这样,加了3个return 0,过了......
2020-4-18
又一次见证了一个return 0惨案
今天做扫描线,好不容易挑出来一个过样例的,交上去->RE
打上几个return 0,交上去改改空间->RE+TLE
一看还有一个线段树 update 没写这个,打上return 0->
本来做好了WA的准备,结果突然跳出来一个绿块、越来越多......
10AC,过了......我还能说什么。
2022/6/25
今天写了这样一行代码:
if(gtz(s[++r]==0)
很不幸,执行过这个语句后,不仅**gtz**的值不对,**r**还被+=2了
一脸懵逼的查错,最终发现问题出在
#define gtz(fi) (hl[fi]!=ti?0:zl[fi])//这样清零就只需要ti++
这个宏定义上
一展开就是
if((hl[++r]!=ti?0:zl[++r])==0)
2022/6/27
P4381 Island 这题前后做了9个月.......令人难以想到的是,问题出在找树的直径的两次dfs上
void dfs(int w,long long l,int fa){//更新答案
for( w可所到的节点v){
if(v是父亲或在环上)continue;dfs(v,c[p][i]+l,p);}}
可一开始找不到,利用生成器(这题数据出人意料的很好生成)才拍出了
“v是父亲或在环上”这一句,在第二次dfs时,会导致树根不会被扩展......
应为“v是父亲或(v和u都在环上)”
2022/7/20
莫队题(十四分块)
bool cmp(ask a,ask b){
return ku[a.l]==ku[b.l]?(ku[a.l]&1)^(a.r<b.r):a.l<b.l;
}
......
for(int i=1;i<=m;i++){t[i].l=read();t[i].r=read();t[i].h=i;}
sort(t+1,t+1+m,cmp);
for(int i=0;i<=n;i++)ku[i]=i/NB+1;mb=ku[n];
怪不得n,m=500000却动了5e10次
2022/7/22
P5383 普通多项式转下降幂多项式
我的多项式板子清空做的并不好,因此对于
cpy(f[w*2+1],f[w],r-l+1);
分配了4(r-l+1)空间,然后WA了后几个点的后面部分
果然,int t2[10000000];不够用......2e7就够了
事后发现,这样多的空间确实必要,3倍就WA掉了......
2022/8/22
void print(int a[],int n){
for(int i=0;i<n;i++)cout<<i<<" ";cout<<endl;
}
int main(){
int n=read(),m=read();n++;m++;
for(int i=0;i<n;i++)a[i]=read();
for(int i=0;i<m;i++)b[i]=read();
times(a,b,n,m);print(a,n+m-1);
return 0;
}
多项式板子温习,竟然出了这种神奇事故......更没想到接下来有这种事故
for(int i=1,i2=2; i>ln ;i*=2,i2*=2){
int u=kpow(op?G:iG,(mu-1)/i2);
for(int j=0;j<ln;j+=i2){
ll d=1;
for(int l=j;l<j+i;l++){
int tt=s[l+i]*d%mu;s[i+l]=s[l];
add1(s[l],tt);add2(s[l+i],tt);d=d*u%mu;
}
}
}
2022/8/29
P5355 [Ynoi2017] 由乃的玉米田,询问要分类讨论,结果把讨论出去的询问也顺手加入了莫队......
if(a1==4&&a4<=K)o[a4].push_back(ask{0,a2,a3,0,i});
【else】 t[++la]=ask{a1,a2,a3,a4,i};
2022/9/22
P5064 [Ynoi2014] 等这场战争结束之后
按秩合并片段
if(he[x[w]]>he[y[w]])swap(x[w],y[w]);
x[w]=find(x[w]);y[w]=find(y[w]);
44->100
2022/10/8
高精度+1<<b,压位1<<60
big operator +(big a,int b){int k=b/B+1;
if(a.o<k)a.o=k;a.s[k]+=1LL<<(b%B);
for(int i=k;i<=a.o;i++){
if(a.s[i]>=E){
a.s[i]-=E;a.s[i+1]++;
}else return a;
}
if(a.s[a.o+1]){a.o++;}return a;
}
2022/10/8
警钟敲烂
int l[N],w,h;
void clear(){w=1;h=0;}