睿智错误
鈤啊,最近手残导致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];