結果
問題 |
No.3089 Base M Numbers, But Only 0~9
|
ユーザー |
|
提出日時 | 2025-04-04 21:40:56 |
言語 | C++14 (gcc 13.3.0 + boost 1.87.0) |
結果 |
AC
|
実行時間 | 6 ms / 2,000 ms |
コード長 | 695 bytes |
コンパイル時間 | 1,137 ms |
コンパイル使用メモリ | 64,128 KB |
実行使用メモリ | 6,144 KB |
最終ジャッジ日時 | 2025-04-04 21:41:16 |
合計ジャッジ時間 | 1,446 ms |
ジャッジサーバーID (参考情報) |
judge3 / judge5 |
(要ログイン)
ファイルパターン | 結果 |
---|---|
sample | AC * 5 |
other | AC * 19 |
ソースコード
#include<iostream> #include<cassert> #include<atcoder/modint> using namespace std; using mint=atcoder::modint998244353; string N; long long M; mint cnt[10],sum[10]; mint R[2<<17],V[2<<17]; int main() { ios::sync_with_stdio(false); cin.tie(nullptr); cin>>M>>N; for(int d=0;d<=9;d++) { //0<=x<M x%10==d //x=10*y+d //10*y<M-d //0<=y<(M-d)/10 long long u=(M-d-1)/10; //0<=y<=u cnt[d]=u+1; sum[d]=mint(u+1)*d+mint(10)*u*(u+1)/2; } R[N.size()]=1; for(int i=N.size();i--;)R[i]=R[i+1]*cnt[N[i]-'0']; mint L=1; mint ans=0; for(int i=0;i<N.size();i++) { int c=N[i]-'0'; ans=ans*M+L*sum[c]*R[i+1]; if(i==0&&c==0)L*=cnt[c]-1; else L*=cnt[c]; } cout<<ans.val()<<endl; }