无论是一眼就会的大佬,还是看了题解才会的大佬,应该都知道这题要对于每个 ai 尽量找到一个最小的可行的"原数"。
于是……我就写下了这段代码。(此处略加修改)
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 以追求效率。但是……结果显而易见。在如此小的 m 下,这根本无法改变任何状况。毫无任何悬念地,我 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 去存。至于为什么空间占用会小那么多,就求大佬解答了。