题目链接 abc357_d 调了好久,对于 N>10 完全不对,但是找不到错误,似乎答案没有超过模数 998244353 的情况都是对的(9 也是对的),但是超过模数的情况就出错了。
#include <bits/stdc++.h>
using namespace std;
using ll = long long;
constexpr ll mod = 998244353;
ll exp10[60], x, len;
ll q_pow(ll a, __int128 exp) {
ll ans = 1;
while (exp) {
if (exp & 1) ans = ans * a % mod, --exp;
else a = a * a % mod, exp >>= 1;
}
return ans;
}
ll f(ll times) {
if (!times) return 0;
__int128 e1 = len;
e1 *= times - 1;
ll ans = 0, h = x % mod * q_pow(10, e1) % mod;
ans += h;
int p;
for (p = 1; 1ll << p <= times; ++p) {
const __int128 e = (1ll << (p - 1)) * len;
h = ans * q_pow(10, e * (mod - 2)) % mod;
ans += h;
ans %= mod;
}
return (ans + f(times - (1ll << (p - 1)))) % mod;
}
int main() {
cin >> x;
len = static_cast<ll>(log10(x) + 1);
cout << f(x) << '\n';
// int t = 10, ans = 0;
// for (int i = 0; i < t; ++i) {
// ans += t;
// t *= 10;
// ans %= mod, t %= mod;
// }
// cout << ans << '\n';
return 0;
}