結果
問題 |
No.3277 Forever Monotonic Number
|
ユーザー |
|
提出日時 | 2025-09-19 22:29:50 |
言語 | C++23 (gcc 13.3.0 + boost 1.87.0) |
結果 |
AC
|
実行時間 | 365 ms / 4,000 ms |
コード長 | 992 bytes |
コンパイル時間 | 3,292 ms |
コンパイル使用メモリ | 284,996 KB |
実行使用メモリ | 7,716 KB |
最終ジャッジ日時 | 2025-09-19 22:29:56 |
合計ジャッジ時間 | 6,154 ms |
ジャッジサーバーID (参考情報) |
judge4 / judge2 |
(要ログイン)
ファイルパターン | 結果 |
---|---|
sample | AC * 1 |
other | AC * 9 |
ソースコード
#include <bits/stdc++.h> #include <atcoder/modint> using mint=atcoder::modint998244353; using namespace std; using ll=long long; int main(){ int ttt; cin>>ttt; vector<ll> p(18,1); for(int i=1;i<18;i++)p[i]=p[i-1]*10; auto is_ok=[](int x)->bool{ while(1){ auto s=to_string(x); if(s.size()==1)return true; for(int i=0;i+1<s.size();i++)if(s[i]>s[i+1])return false; int y=0; for(int i=0;i<s.size();i++)y+=s[i]-'0'; x=y; } }; while(ttt--){ ll n; cin>>n; ll now=n+1; mint ans=(((mint)10).pow(n+1)-1)/9; // cout<<ans.val()<<endl; int dsum=0; while(1){ auto s=to_string(now); for(int i=0;i+1<s.size();i++){ if(s[i]>s[i+1]){ for(int j=i+1;j<s.size();j++)s[j]=s[i]; break; } } now=stoll(s); dsum=0; for(int i=0;i<s.size();i++)dsum+=s[i]-'0'; if(is_ok(dsum))break; else now++; } ll cost=now-(n+1); ll x=cost/8,y=cost%8; ans+=(((mint)10).pow(x)-1)/9*8; ans+=((mint)10).pow(x)*y; cout<<ans.val()<<endl; } }