今天下午的 T3,让我觉得很有必要写一下自己会犯的zz错误。
\[\texttt{2020-11-25}
\]
Part 1 喜闻乐见的手写堆
众所周知,zjj 不会用 STL。
-
大于小于号打反。
-
下标直接当数组内部元素来用。
Part 2 奇奇怪怪的代码习惯导致的错误
例如今天的:
if(s[i]);printf("%llu",s[i]);
这让我不禁想起了前几天的:
inline char gc(){char c=getchar();for(;...;c=getchar())return c;}
很明显 for 循环后面少打了一个分号。
Part 3 消失的路径压缩
有时候手快就没打,变成这个鬼样子:
inline int find(int x){return (f[x]==x)?(x):(find(f[x]));}
\[\texttt{2020-11-27}
\]
发明了快速幂的新写法(
if(x>=pk){sum=sl[pk];for(LL i=x/pk,s=sl[pk];i;i>>=1){if(i&1)sum=sum*s%pk;s=s*s%pk;}}
\[\texttt{2020-11-30}
\]
又是喜闻乐见的 ZJJ 手写堆写炸
我 ZJJ 就是 WA 成 \(0\) 分,因此退役,也不可能写一次 priority
今天注意到了新的细节,删除某一个元素的写法应当是:
inline void delete_(int x)
{
int now=num[x];
if(now==tail){tail--;return;}
jh_(num[x],num[d[tail]]);
tail--;
down(now);
up(now);
return;
}
\[\texttt{2020-12-29}
\]
多项式卷起来的长度
写 \(\ln\) 的时候,调用预处理部分写错了:
init(n+1);
应当是 \(2n+1\) 才是,因为两个长度为 \(n+1\) 的卷起来会得到长度为 \(2n+1\) 的。