結果
問題 |
No.3277 Forever Monotonic Number
|
ユーザー |
|
提出日時 | 2025-09-19 20:43:36 |
言語 | C++23 (gcc 13.3.0 + boost 1.87.0) |
結果 |
TLE
|
実行時間 | - |
コード長 | 1,324 bytes |
コンパイル時間 | 3,277 ms |
コンパイル使用メモリ | 286,672 KB |
実行使用メモリ | 13,604 KB |
最終ジャッジ日時 | 2025-09-19 20:43:45 |
合計ジャッジ時間 | 8,390 ms |
ジャッジサーバーID (参考情報) |
judge2 / judge3 |
(要ログイン)
ファイルパターン | 結果 |
---|---|
sample | AC * 1 |
other | TLE * 1 -- * 8 |
ソースコード
#include <bits/stdc++.h> #include <atcoder/modint> using namespace std; using namespace atcoder; using ll = long long; using mint = modint998244353; set<ll> ok; set<ll> ng; bool c(ll x){ if (ok.count(x)) return true; if (ng.count(x)) return false; string sx = to_string(x); int l = sx.size(); if (l==1) return true; for (int i=0; i<l-1; i++){ if (sx[i] > sx[i+1]){ ng.insert(x); return false; } } ll y = 0; for (auto d : sx) y += d-'0'; if (c(y)){ ok.insert(x); return true; }else{ ng.insert(x); return false; } } int main(){ set<ll> ok; int t; cin >> t; while(t--){ ll n; cin >> n; n++; string sn = to_string(n); int l = sn.size(); string sm = sn.substr(0, 1); for (int i=1; i<l; i++){ if (sm.back() <= sn[i]) sm += sn[i]; else{ while((l--)>i) sm += sm.back(); break; } } ll m = stoll(sm); while(!c(m)) m++; ll p = (m - n) / 8; ll q = (m - n) % 8; mint ans = (mint(10).pow(n) - 1) / 9; ans += (mint(10).pow(p) - 1) * 8 /9; ans += q * mint(10).pow(p); cout << ans.val() << endl; } return 0; }