結果
問題 |
No.3118 Increment or Multiply
|
ユーザー |
![]() |
提出日時 | 2025-04-19 16:58:04 |
言語 | C++23 (gcc 13.3.0 + boost 1.87.0) |
結果 |
AC
|
実行時間 | 33 ms / 2,000 ms |
コード長 | 858 bytes |
コンパイル時間 | 1,330 ms |
コンパイル使用メモリ | 102,424 KB |
実行使用メモリ | 7,844 KB |
最終ジャッジ日時 | 2025-04-19 16:58:08 |
合計ジャッジ時間 | 3,681 ms |
ジャッジサーバーID (参考情報) |
judge5 / judge4 |
(要ログイン)
ファイルパターン | 結果 |
---|---|
sample | AC * 1 |
other | AC * 35 |
ソースコード
#include <iostream> #include <vector> #include <algorithm> using namespace std; long long s(long long a) { const int mod = 998244353; a %= mod; int inv = 499122177; return a * (a + 1) % mod * inv % mod; } void solve() { const int mod = 998244353; long long n, a; cin >> n >> a; if (a == 1) { cout << s(n - 1) << endl; return; } vector<long long> v, d; long long tmp = n, sum = 0; while (tmp > 0) { v.push_back(tmp); d.push_back(sum); sum += tmp % a; ++sum; tmp /= a; } v.push_back(0); long long ans = 0; for (int i = 0; i + 1 < v.size(); ++i) { long long cnt = (v[i] - v[i + 1]) % mod; ans += cnt * d[i] % mod; ans += v[i] % mod * cnt % mod - s(v[i]) + s(v[i + 1]) + mod; ans %= mod; } cout << ans << endl; } int main() { int t; cin >> t; while (t--) solve(); }