一些导致WA/MLE/TLE的坑点

本文会持续更新

以下题号均为洛谷题号

1.轻易不要调用 $pow$ 函数和 $ceil$ 函数,会丢精度。还是老老实实写快速幂吧,写 (n + t - 1) / t 比 ceil(n * 1.0 / t) 好。比如 P1351,我用 pow 连样例都过不了(或者说我太菜了)

		(num2 += w[e[j].v] * w[e[j].v]) %= mod;
//		(num2 += pow(w[e[j].v],2)) %= mod;这行代码(pow)会导致精度问题,慎用

2.建图时如果节点很多,比如 N = 2.1e6 (N为点数)而内存限制为 125MB 时,不要用 vector 存图!会 MLE。比如 P2403,我用 vector 就 MLE 过不了,用链式前向星直接 AC 。

struct graph{
	int head[MAX],tot;
	struct edge{
		int v,nxt;
	}e[MAX];
	inline void add(int u,int v){
		e[++tot] = (edge){v,head[u]};
		head[u] = tot;
	}
}g,f;//链式前向星
vector <int> g[MAX],f[MAX];

3. bool 类型不能用 scanf("%d",&b); 输入,本人 P4782 因为这个被硬控了4次爆零。

4.如果你关了流,请不要用快写输出,会 TLE (至少在洛谷评测机上无法输出

inline void write(ll x){
    if(x / 10) write(x / 10);
    putchar((x % 10 + '0'));
}
……
ios::sync_with_stdio(false);
cin.tie(0),cout.tie(0);

本人因此 P5283 三次爆零

5.唐诗错误

(1) 不要在点双之间连边(恐怕只有我一个人会这么唐)P3225

可以在强连通分量、边双之间连边,点双只能统计割点

(2) 在边双之间连边时注意不要建双向边!!!

跑完 tarjan 出环了…… 例如:P2783

6.不要这样写:

a[++tot].pos = a[tot-1].pos + 1,a[tot].d = -1;

本地运行或许没问题,一旦提交全WA。怎么说呢, ~tot~ 的值可能会出现问题 改完后 P2352 WA \to AC

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值