結果

問題 No.42 貯金箱の溜息
ユーザー 沙耶花
提出日時 2021-10-27 18:13:15
言語 C++17
(gcc 13.3.0 + boost 1.87.0)
結果
AC  
実行時間 800 ms / 5,000 ms
コード長 990 bytes
コンパイル時間 4,704 ms
コンパイル使用メモリ 256,572 KB
最終ジャッジ日時 2025-01-25 07:47:25
ジャッジサーバーID
(参考情報)
judge1 / judge4
このコードへのチャレンジ
(要ログイン)
ファイルパターン 結果
other AC * 3
権限があれば一括ダウンロードができます

ソースコード

diff #
プレゼンテーションモードにする

#include <stdio.h>
#include <bits/stdc++.h>
#include <atcoder/all>
using namespace atcoder;
using mint = modint;
using namespace std;
#define rep(i,n) for (int i = 0; i < (n); ++i)
#define Inf 1000000000
vector<vector<mint>> a;
void solve(){
long long M;
cin>>M;
vector<mint> dp(22,0);
dp[0] = 1;
int c = 0;
while(M!=0){
vector<mint> ndp(22,0);
rep(i,22){
if(dp[i]==0)continue;
rep(j,a[c].size()){
if((i+j)%10!=M%10)continue;
ndp[(i+j)/10] += dp[i] * a[c][j];
}
}
c = min(c+1,2);
swap(dp,ndp);
M/=10;
}
cout<<dp[0].val()<<endl;
}
int main(){
mint::set_mod(1000000009);
a.resize(3);
a[0].resize(55,0);
rep(i,10){
rep(j,10){
a[0][i+j*5] ++;
}
}
a[1].resize(109,0);
rep(i,55){
rep(j,55){
a[1][i+j] += a[0][i] * a[0][j];
}
}
//cout<<a[0][10].val()<<endl;
a[2].resize(108 + 54 + 1,0);
rep(i,109){
rep(j,55){
a[2][i+j] += a[0][j] * a[1][i];
}
}
int _t;
cin>>_t;
rep(_,_t)solve();
return 0;
}
הההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההה
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
0