为了能到远方,脚下的每一步都不能少.|

Aurora-JC

园龄:3年1个月粉丝:3关注:4

2023-05-25 22:20阅读: 38评论: 0推荐: 0

【杂项】我的一些代码错误(调哭)

为什么有人同一种错误老是会经常犯,而且还调很久

1. 开什么类型,输出时也应该输出该类型,或者强制类型转化,不然本地可能没有什么问题,但交上去就会出问题,详见12两处代码仅仅改了输出的类型,结果却大不相同。

2. 要看清数据范围,有时候会爆 long long,可以选择用 __int128 (这是个好东西),或者自然溢出(如果模数特殊的话)。

3. 网络流 tot=1。

4. ISAP rest 为 0 时直接 return 而不是 break。

5. size 尽量用 sz 代替,可能交上去会 CE ,为了预防某些单词是关键字,可以将这些单词的元音全部去掉。

6. << 和 >> 的优先级很低,多数情况下要加括号。

7. 网络流 dinic 模板之前一直打错了,直到做到这题 P2598 [ZJOI2009]狼和羊的故事 ,一直以为是卡 dinic ,专门去学了 ISAP ,还觉得 dinic 不行了,原来是自己之前的网络流都打假了,背模板果然还是不行,呜呜。

int dinic(int x,int flow){
if(x==t) return flow;
int rest=flow;
for(int i=now[x];i;i=Next[i]){
now[x]=i;
int y=to[i];if(d[y]!=d[x]+1||!edge[i]) continue;
int k=dinic(y,min(edge[i],rest));
if(!k) d[y]=0; //这里是 if(!k) 不是 if(k) !!!!!!
edge[i]-=k,edge[i^1]+=k,rest-=k;
if(!rest) return flow;
}
return flow-rest;
}

8. 线段树 lzay 数组下推的时候,是加等于,不是等于(惨痛的教训,就因为这里打错了,少了 70 分,排名从 38 掉到 99 ,详见这场)。

void PushDown(int u){
if(lazy[u]){
lazy[ls]+=lazy[u],lazy[rs]+=lazy[u];
minn[ls]-=lazy[u],minn[rs]-=lazy[u];
lazy[u]=0;
}
}

8. 有些时候记得要先用变量将那些值可能会变的实现存下来,不然可能就会像我一样调了4个多小时的splay,傻逼

9. 平衡树 splay ,插入哨兵时要看清数据范围,要比最大值要大,最小值要小,不然旋转时会死循环。

10. 程序有时候死掉,可能是因为模了 0 ,例如下面这位受害者,我不说是谁,写的一个 add

void add(int &a,int b){
a+=b;a%=b; //应该是 a%=mod;
}

先不说写错了,如果 b 为 0 ,程序就会死掉。

  • 代码本地能运行,但提交就会 TLE? 多半是有函数没有返回值但没写成 void() 类。

本文作者:Aurora-JC

本文链接:https://www.cnblogs.com/jiangchen4122/p/17433163.html

版权声明:本作品采用知识共享署名-非商业性使用-禁止演绎 2.5 中国大陆许可协议进行许可。

posted @   Aurora-JC  阅读(38)  评论(0编辑  收藏  举报
点击右上角即可分享
微信分享提示
评论
收藏
关注
推荐
深色
回顶
收起