求助
查看原帖
求助
802655
ZhuYF1029楼主2023/12/26 00:06

不知道为什么,最后一个测试点错了

//Code by HackerZhuYifan who enjoys coding.
#include <bits/stdc++.h>
#pragma GCC optimize(2)
#define int long long
using namespace std;
const int inf=1e18;
const int mod=1e9+7;
const int maxk=1e4+10,maxd=1e2+10;
//main code:
void update(int &x,int y){
    x=((x%mod+y%mod)%mod+mod)%mod;;
    return;
}
string s;
vector<int> num;
int n,d,dp[maxk][maxd][3];
main(){
    cin >> s >> d;
    num.push_back(inf);
    for(int i=s.size()-1;i>=0;i--){
        num.push_back(s[i]-'0');
    }
    n=num.size()-1;
    dp[0][0][1]=1;
    for(int i=1;i<=n;i++){
        for(int j=0;j<d;j++){
            for(int k=0;k<num[i];k++){
                update(dp[i][j][0],dp[i-1][(j-k%d+d)%d][0]);
                update(dp[i][j][0],dp[i-1][(j-k%d+d)%d][1]);
                update(dp[i][j][0],dp[i-1][(j-k%d+d)%d][2]);
            }
            update(dp[i][j][0],dp[i-1][(j-num[i]%d+d)%d][0]);
            update(dp[i][j][1],dp[i-1][(j-num[i]%d+d)%d][1]);
            update(dp[i][j][2],dp[i-1][(j-num[i]%d+d)%d][2]);
            for(int k=num[i]+1;k<=9;k++){
                update(dp[i][j][2],dp[i-1][(j-k%d+d)%d][0]);
                update(dp[i][j][2],dp[i-1][(j-k%d+d)%d][1]);
                update(dp[i][j][2],dp[i-1][(j-k%d+d)%d][2]);
            }
        }
    }
    int ans=-1;
    update(ans,dp[n][0][0]);
    update(ans,dp[n][0][1]);
    cout << ans << endl;
    return 0;
}
2023/12/26 00:06
加载中...