睿智错误

鈤啊,最近手残导致fst得好多啊淦,以前总是觉得没必要记录,现在一想还是记下来防止下次吧/kk

以下我分几类来记录。

数据类型和范围

虽然这方面我还是很注意很注意,但还是避免不了睿智错误/kk

×:

    1<<i

√:

    1ll<<i

×:

    long long x = (1ll << 64) - 1;

√:

    unsigned long long x = 0;
    x--;

(1<<i)(1>>i)中的(i)(64)大或比(0)小是ub!!!

虽然跑出来答案没错,但是不要这么写!


×:

    long long a;
    printf("%d",a);

√:

    long long a;
    printf("%lld",a);

别问,问就是真犯过。


多测不清空

我对此真的是深恶痛绝

×:

    memset(head,0,sizeof(head));

√:

    memset(head,0,sizeof(head));
    edge_cnt = 0;

×:

using namespace std;
int cnt;
int main()
{
    while (T--)
    {
        if (...)
            cnt++;
    }
}

√:

using namespace std;
int cnt;
int main()
{
    while (T--)
    {
        cnt = 0;
        if (...)
            cnt++;
    }
}

运算符优先级

可能不多/kk

×:

    if (a < b && a > c || b > c)

√:

    if (a < b && (a > c || b > c))

其他错误

只能错一次

×:

    int f[N];
    memset(f,127,sizeof(f));
    f[i] = min(f[i],f[i - 1] + f[i - 2]);

√:

    int f[N];
    memset(f,127,sizeof(f));
    f[i] = min(1ll * f[i],0ll + f[i - 1] + f[i - 2]);

dp子串的时候别dp成子序列了/kk

子序列:

    f[i][j] = max(f[i - 1][j],max(f[i][j - 1],f[i - 1][j - 1] + (s[i] == t[j])));

子串:

    if (s[i] == t[j])
        f[i][j] = f[i - 1][j - 1] + 1;
    else
        f[i][j] = 0;

倍增没把x跳到和y深度相同/kk

×:

    for (int i = 19;i >= 0;i--)
        if (dep[fa[x][i]] > dep[y])
            ans = max(ans,mx[x][i]),x = fa[x][i];

√:

    for (int i = 19;i >= 0;i--)
        if (dep[fa[x][i]] >= dep[y])
            ans = max(ans,mx[x][i]),x = fa[x][i];

原文地址:https://www.cnblogs.com/sdlang/p/13951118.html