結果
| 問題 | No.3628 Sum of Superfibonacci Numbers |
| コンテスト | |
| ユーザー |
|
| 提出日時 | 2026-08-14 22:08:18 |
| 言語 | C++23 (gcc 15.2.0 + boost 1.90.0) |
| 結果 |
AC
|
| 実行時間 | 560 ms / 2,000 ms |
| + 683µs | |
| コード長 | 2,120 bytes |
| 記録 | |
| コンパイル時間 | 2,585 ms |
| コンパイル使用メモリ | 364,208 KB |
| 実行使用メモリ | 9,388 KB |
| 最終ジャッジ日時 | 2026-08-14 22:08:35 |
| 合計ジャッジ時間 | 8,448 ms |
|
ジャッジサーバーID (参考情報) |
judge3_0 / judge1_0 |
(要ログイン)
| ファイルパターン | 結果 |
|---|---|
| sample | AC * 1 |
| other | AC * 15 |
ソースコード
#include <bits/stdc++.h>
using namespace std;
using ll = long long;
const ll mod = 998244353;
int main() {
ios::sync_with_stdio(false); cin.tie(nullptr);
vector<int> dif(1000);
for (int i = 0; i < 1000; i++) {
int j = i;
while (true) {
if (j == 1000 || j / 100 > (j / 10) % 10 + j % 10) break;
j++;
}
dif[i] = j - i;
}
int T; cin >> T;
while (T--) {
string N; cin >> N;
vector<vector<vector<vector<ll>>>> dp(2, vector<vector<vector<ll>>>(10, vector<vector<ll>>(10, vector<ll>(10))));
dp[1][0][0][0] = 1;
for (char c: N) {
int d = c - '0';
vector<vector<vector<vector<ll>>>> ndp(2, vector<vector<vector<ll>>>(10, vector<vector<ll>>(10, vector<ll>(10))));
for (int b = 0; b < 2; b++) {
for (int s = 0; s < 10; s++) {
for (int t = 0; t < 10; t++) {
for (int u = 0; u < 10; u++) {
for (int v = max(0, t - u); v < 10; v++) {
if (b == 1 && v > d) break;
int nb = b;
if (b == 1 && v < d) nb = 0;
ndp[nb][t][u][v] += dp[b][s][t][u];
ndp[nb][t][u][v] %= mod;
}
}
}
}
}
dp = ndp;
}
ll n = stoll(N);
ll ans = (n % mod) * (n % mod + 1) / 2 % mod;
for (int b = 0; b < 2; b++) {
for (int s = 0; s < 10; s++) {
for (int t = 0; t < 10; t++) {
for (int u = 0; u < 10; u++) {
// cout << b << ' ' << s * 100 + t * 10 + u << ' ' << dp[b][s][t][u] << '\n';
ans += dp[b][s][t][u] * dif[s * 100 + t * 10 + u] % mod;
ans %= mod;
}
}
}
}
ans -= 100;
if (ans < 0) ans += mod;
cout << ans << '\n';
}
}