脑残错误大合集

无他,只是发现自己最近因为脑残导致的错误实在太多,遂怒撰
不过发现装修好博客之后确实更爱写文章了,怎么回事呢。。。

一、long long类型:

1、声明

首先,能define int long long的就尽量开一下。
我目前没有因为这个爆过空间,但还是在此羡慕一下能用vscode的小伙伴们,可以直接看空间。
但不开long long有时候不会WA而是会TLE,怎么回事呢。。。
更离谱的,把所有变量全声明成ll,TLE;define int long long,AC
what the …… ?

2、使用

声明了long long 之后一定要记得用 %lld 读入输出,要不然和没开没有区别,我目前因为这个爆过很多次零了。而且直接把“d”define成“lld”是不行的,怎么回事呢。。。

3、调试

如果在调题的时候发现老是输出很大很长奇奇怪怪的数,考虑是不是用%lld输出却没有define int long long。
“谎报军情,拖出去斩了” —— ACLove

二、输出格式

1、换行

写\n啊啊啊!我爆过很多次零也是因为这个。
“你就说你整篇代码能不能凑出一个\n”“你就说这道题爆零了是不是你的问题” ——ACLove。

2、有的题会加一些奇奇怪怪的限制条件,对输出的格式有不一般的要求,要仔细看好。

三、代码细节

主要就是最近学的新东西,板子老是敲错然后怎么调都调不出来

1、kruskal:注意什么时候用边m,什么时候用点n。

void kruskal() {
    sort(e + 1, e + m + 1, cmp);//排序从一到m
    for (int i = 1; i <= n; i++) fa[i] = i;//并查集初始化是从一到n
    for (int i = 1; i <= m; i++) {//枚举从一到m
        int r1 = find(e[i].x);
        int r2 = find(e[i].y);
        if (r1 == r2)
            continue;
        fa[r1] = r2;
        ans += e[i].z;
        tot = max(tot, e[i].z);
        cnt++;
        if (cnt == n - 1)
            break;
    }
}

2、树状数组:

void add(int x, int y) {
    for (int i = x; i <= n; i += lowbit(i)) {
        c1[i] += y;
        c2[i] += y * x; //注意这里是乘x,我老是写成乘i,怎么回事呢。。。
    }
}

并查集(虽然不是新东西了但还是老写错,怎么回事呢。。。)

int find(int x){
	return fa[x] == x ? fa[x] : fa[x] = find(fa[x]); //要写路径压缩
}

trie树的cnt要初始化为1

如果初始为零,会导致能过样例以及能过你自己手搓的小样例,但交上去就爆零

二分图要开二倍空间!!!

四、其他细节

1、如果有多组测试数据,记得每次要memset初始化
2、链前建双向边要开二倍空间!
3、虽然很脑残,但边数是m不是n……
4、1ll * (1 << i)(错误) ;(1ll << i) (正确)。

五、undefined behavour

1、如果一个布尔函数出现了在某个情况下既没有规定返回1也没有规定返回0的情况(例如:if(某条件) retrun 1,但没写 else return 0),会返回一些未知的东西,会产生很大影响。
2、数组越界有时候不会re而是会wa。
例如:如果声明了一个 f[N],初始化的时候从1循环到N进行初始化,就可能会出问题。。。
3、多测清空

posted @ 2024-03-18 21:04  Nihachu  阅读(19)  评论(3编辑  收藏  举报