千万不要指望省点事,警示后人 TLE#10
查看原帖
千万不要指望省点事,警示后人 TLE#10
556000
Mrkn_chenyx12楼主2024/3/4 18:38

无论是一眼就会的大佬,还是看了题解才会的大佬,应该都知道这题要对于每个 aia_i 尽量找到一个最小的可行的"原数"。

于是……我就写下了这段代码。(此处略加修改)

unordered_map<ull, int> revmap;
...
for (int i = 1; i <= m; i++) {
	read(b[i]);
	revmap[b[i]] = i;
}
for (int i = 1; i <= n; i++) {
	ull digit = 0, tmp = a[i];
	while (tmp) {
		if (revmap[tmp]) {
			digit = revmap[tmp];
		}
		tmp /= d;
	}
	if (revmap[tmp]) digit = revmap[tmp];
	if (digit) {
		st[0][i] = 1ll << digit;
	}
}

甚至,我还专门把 map 换成了 unordered_map 以追求效率。但是……结果显而易见。在如此小的 mm 下,这根本无法改变任何状况。毫无任何悬念地,我 TLE 了。

#10 TLE 3.20s/241.91MB

一番思考之后,我改用了这段代码。(此处略加修改)

int haszero = 0;
for (int i = 1; i <= m; i++) {
	read(b[i]);
	if (!b[i]) haszero = i;
}
for (int i = 1; i <= n; i++) {
	if (haszero) {
		st[0][i] = 1ll << haszero;
		continue;
	} 
	ull digit = 0, tmp = a[i];
	while (tmp) {
		for (int j = 1; j <= m; j++) if (tmp == b[j]) {
			digit = j;
			break;
		}
		tmp /= d;
	}
	if (digit) {
		st[0][i] = 1ll << digit;
	}
}

然后这次……

#10 AC 985ms/79.82MB

希望不会有下一个像我这么傻的人。这么点数据量,不!值!得! 专门搞个 map 去存。至于为什么空间占用会小那么多,就求大佬解答了。

2024/3/4 18:38
加载中...