首页 > 技术文章 > 自己犯的的zz错误

zjjws 2020-11-25 19:56 原文

今天下午的 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\) 的。

推荐阅读