Forgin酱家今天的饭

此博客是笔者(自2019.12.20)的所有代码中debug出来的的部分错误。


 干脆还是改个名公开出来吧,让大家都看看笔者有多菜。反正有很长一段时间都是没写

                                                                                                         ------update 2021.11.11


此博客会不定时更新

12.20 【模板】多项式乘法逆将lim赋值为0

int lim=1,L=0;while(lim<(n<<1))lim<<=1,L++;

12.20【模板】多项式除法lim少计算了记位,未将rev重新计算

lim=1;L=0;while(lim<=2*n)lim<<=1,++L;
rev[0]=0;for(int i=1;i<lim;i++)rev[i]=(rev[i>>1]>>1)|((i&1)<<(L-1));

12.21【模板】多项式对数函数(多项式 ln)再次只把lim算到n的位置而不是2n

int lim=1,L=0;while(lim<(n<<1))lim<<=1,L++;

12.21【模板】多项式指数函数(多项式 exp)从上一道题复制来的模板忘了清零,开始的len也不能设为n

for(int i=0;i<=lim;i++)A[i]=B[i]=0;
int len=1;while(len<=n)len<<=1;

12.23 [NOI2017]泳池powp数组初值赋为0

powp[0]=1;for(int i=1;i<=m;i++)powp[i]=powp[i-1]*p%mo;

12.28[ZJOI2019]开关qkpow忘记返回值

return t;

12.31Electric resistancetot未赋初值

int tot=0;

1.2Zhu and 772002将参传反了

int tmp=Gauss(cntp,n);

1.3Harry And Math Teacher输出时忘记取模

printf("%lld\n",(C.c[1][1]+C.c[2][1]+C.c[1][2]+C.c[2][2])%mo);

1.8遥远的国度倍增打错了,线段树参传反了

for(int i=1;i<24;i++)f[u][i]=f[f[u][i-1]][i-1];
int p=query(1,dfn[y]-1,1,1,n),q=INF;

1.20优秀的拆分hash没取模导致溢出

for(int i=n;i>0;i--)hash[i]=(hash[i+1]*27+ns[i-1]-'a'+1)%mo;

1.28残缺的字符串赋值对象错误,给整个结构体赋值

A[i]=complex(tmp*tmp*tmp,0);

4.20HH去散步矩阵快速幂的单位矩阵(n,n)未赋值

for(int i=0;i<a.n;i++)t.c[i][i]=1;

6.4春节十二响没开C++11的优先队列swap是O(n),排序的cmp返回值应为0与1

if(q[id[x]].size()<q[id[v]].size())swap(id[x],id[v]);

6.16Priest John's Busiest Day遍历图时将G[u]打成了G[i]

for(int i=0;i<V[u].size();i++){

6.16Let's go home2sat打了tarjan函数忘了去遍历

for(int i=1;i<=2*n;i++)if(!dfn[i])tarjan(i);

12.8微信步数用%lld输出int

printf("%lld\n",ans);

9.6Blood Cousins Devc++ 本地没打vector的头文件不会CE

#include<vector>

10.4Chemistry LCT总需要乱旋几下,但不能乱splay

father[u]=v;makeRoot(u);return 1;

10.5Database 多组数据中途return 0;

if(m==1){puts("YES");continue;}bool flag=0;

10.20走迷宫 无解判断错误,在乱判断,合并应用按位与,注意初值。

for(int i=1;i<=cnt;i++)if(!dag[i])q.push(i),suc[i]=0;suc[belong[T]]=1;
for(int i=0;i<siz;i++)suc[t]&=suc[G[t][i]];

10.22狼人 Kruskal重构树,新建的节点应该连接边的两端点子树的根,而不是直接连接边的两个端点。

if((u=findSet(u))==(v=findSet(v)))continue;
addEdge(idx,u);addEdge(idx,v);

10.22函数调用 将mn混淆,用n当作函数个数去拓扑。

for(int i=1;i<=m;i++)if(!deg[i])q.push(i);

10.23Milk Patterns 后缀数组排序是将z_{sa_{i}}z_{sa_{i-1}}比较。

for(int i=2;i<=n;i++)x[sa[i]]=(z[sa[i]]==z[sa[i-1]]&&z[sa[i]+k]==z[sa[i-1]+k])?m:++m;

10.23贪吃蛇 不仔细读题,权值相同的点通过编号来比较大小。

for(int j=1;j<=n;j++)q1.push_back(j),b[j]=mkpr(a[j],j);

10.30乘法 输出16进制时多输出了一个不可见字符。

for(int i=16;i>=0;i--)if(flag||answer[i]!='0')flag=1,putchar(answer[i]);

11.2最短路径 组合数递推式打错。

C[i][j]=add(C[i-1][j],C[i-1][j-1],mo);

11.9 Boatherds 点分治找点所属子树应该赋值为父亲的所属子树,而不是父亲。

if(fa==Rt)belong[u]=u;else belong[u]=belong[fa];

11.11 回文子序列 模数打错。

const int mo=1e9+7;

11.13 卡牌游戏 二元环不能直接通过父亲判断往回走。

int v=G[u][i];if(vis[v]||v==fa){if(v==fa)fa=0;continue;}

11.16 换教室 背包体积根本不变,忘记在体积上+1

if(j<m)dp[i+1][j+1][1]=min(dp[i][j][0]+1.0*p[i+1]*tmp2+1.0*(1.0-p[i+1])*tmp1,dp[i+1][j+1][1]);
if(j<m)dp[i+1][j+1][1]=min(dp[i][j][1]+1.0*p[i]*p[i+1]*tmp4+1.0*p[i]*(1.0-p[i+1])*tmp3+1.0*(1.0-p[i])*p[i+1]*tmp2+1.0*(1.0-p[i])*(1.0-p[i+1])*tmp1,dp[i+1][j+1][1]);

11.19 [模板]manacher算法马拉车通过回文串求解下一个回文串长度时不能超过当前回文串长度。

if(mid+p[mid]>=i)p[i]=min(p[mid+mid-i],mid+p[mid]-i);

忽然发现好久没更了

1.7 切糕 网络流建图时把建边的addedge调用成了建单向边的addEdge。

addedge(S,id[i][j][0],INF);
addedge(id[i][j][k-1],id[i][j][k],val[i][j][k]);
addedge(id[i][j][k],id[x][y][k-D],INF);
addedge(id[i][j][R],T,INF);

1.18 New Year and Forgotten Tree按秩合并并查集不上传findSet父亲,直接返回父亲的值。

int findSet(int x){return fa[x]==x?x:findSet(fa[x]);}

1.21 机动车限行 网络流dfs时流了流量未将maxf减去流量。

res+=tmp;e[i].flow-=tmp;e[e[i].op].flow+=tmp;mxf-=tmp;

1.24 循环之美对于n,m一起整除分块时可以较大部分可以用\frac{n}{x}+\frac{m}{x}表示,不能直接通过模数判断在分那个块,将n,m的块分开编号,但上面的方法一定是在根号范围内递增的,比较每次都会改一个。

int y=N/x+M/x;

1.25 贸易 NTT的rev数组求错,'|'用成'&',G的次方也从mo-1写成了mo+1(不过这个居然没影响。)

for(int i=0;i<lim;i++)rev[i]=(rev[i>>1]>>1)|((i&1)<<L-1);
const int W=qkpow(typ^1?ivG:orG,(mo-1)/(mid<<1),mo);

1.26 Matrix of Determinants 高斯消元时存在自由元应该立即退出当前列的枚举,不要交换已经枚举得到的k与当前行,因为k可能是0会让当前行没掉。

if(!k){res=0;row--;continue;}
if(k^row){res=mo-res;for(int i=col;i<=m;i++)swap(a[row][i],a[k][i]);}

2.7 卡常数 二分解密时貌似二分原值比二分经过一次函数变化后变大的一次加密值更优,对精度影响更小。

if(calc(mid*lastres+1.0)<x)l=mid;else r=mid;

2.7 Cards 模数是输入的P...

printf("%d\n",1ll*ans*qkpow(m,p-2,p)%p);

2.8 数列 由于dp值中李超树维护的函数的部分是可以小于0的,所以查询最大值时对于空的点应该返回-inf。

if(!rt)return -INF;

2.17 Query on a tree VI笑死,树链剖分根本没有重链,每个点都连到根。且未注意线段树上点是以dfs序为序排列。

dfn[u]=++idx;ord[idx]=u;ltp[u]=tp;
if(l==r){int u=ord[ai];num[rt][col[u]]--;col[u]^=1;num[rt][col[u]]++;return ;} 

2.24 魔法商店整体分治忘记赋初始颜色。

for(int i=1;i<=n;i++)vec[1].pb(i),col[i]=1;

3.2Journey将本该在同一个if下判断的语句分开写,却没有关注(\not <) \not = (>)

if(siz1<=siz2)id[pre[u]]=id[pre[v]];

3.21Minimal DFA高精比较应该从高位比较起,而不是低位。

for(int i=len-1;i>=0;i--)

3.30 等待 如果初始值使用-1判断有无解,注意后面判别是>=0不是>0。

if(tp>=0)

4.2树点购买一般树中不能直接通过度数是否为1来判断是不是叶子,根的度数也可以为1。

if(deg[u]==1&&fa)

4.2舰队游戏 对DAG拓扑时不能直接把第一个枚举的点与最后一个枚举的点当成起终点,可以有不止一个出\入度为0的点。

for (int i = 1; i <= idx; i++) {
    int x = ord[i];
    if (x == 1 || x == n)
        continue;
    ...
}

4.5高速公路 两个long long 的gcd用 int 求。

LL gcd(LL a,LL b){return !b?a:gcd(b,a%b);}

4.5生成魔咒 不同子串个数是n^2的,可能达到long long 级别。

LL summ[MAXN<<2],num[MAXN<<2];bool lzy[MAXN<<2];

5.18获奖名单 欧拉回路不要访问已访问过的边,否则会变成O(n^2)

for(int i=head[u];i;head[u]=i=e[head[u]].nxt){

8.6面基之路 应该先对k操作后再把指针跳到下一位,而不是先跳再操作。其中k表示下一个没操作的点。

while(k<=K&&b[k].fir<=len)cnt[b[k].sec]++,times+=(cnt[b[k].sec]==0),k++;

8.7神隐 数组大小把MAXM用成MAXN。

int id[MAXM];

8.9ddtt 注意应该在转移到一个点的状态都转移完了后才能把它转移出去。

不放了。

8.12矩形 把n和m搞反

int z=g[m][y][x];

8.16情报中心 线段树上单点维护了两个值,insert时需要两点权值有序,但merge的时候没有维护其有序性。

if(res.x==res.y&&res.vx<res.vy)swap(res.vx,res.vy);

8.16网格 将双向边的addedge与单向边的addEdge搞反。

addedge(id[i][j],id[i+1][j],++cnt);

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值