QOJ.ac

QOJ

IDProblemSubmitterResultTimeMemoryLanguageFile sizeSubmit timeJudge time
#257679#6300. Best Carry Player 2pengpeng_fudan#RE 0ms0kbC++142.2kb2023-11-19 11:43:542023-11-19 11:43:54

Judging History

你现在查看的是最新测评结果

  • [2023-11-19 11:43:54]
  • 评测
  • 测评结果:RE
  • 用时:0ms
  • 内存:0kb
  • [2023-11-19 11:43:54]
  • 提交

answer

#include<bits/stdc++.h>
using namespace std;
using big=__int128_t;
using ll=long long;
int n;
ll a;int k;
big dp[37][20][2];
int get(big& a,big b){
    if(a==-1)   a=b;
    else if(b!=-1){
        if(a>b) a=b;
    }
}
void pt(big k){
    vector<int> ans;
    while(k){
        ans.push_back(k%10);
        k/=10;
    }
    int sz=ans.size();
    for(int i=sz-1;i>=0;i--)    cout<<ans[i];
    cout<<'\n';
}
void solve(){
    cin>>a>>k;
    if(k==0){
        long long z=1;
        for(int i=1;i<=18;i++){
            if(a%10!=9){
                cout<<z<<'\n';
                return ;
            }
            a/=10;
            z=z*10;        
        }
        cout<<z<<'\n';
        return ;
    }   
    for(int i=0;i<=18;i++)  for(int j=0;j<=k;j++)   dp[i][j][0]=dp[i][j][1]=-1;
    dp[0][0][0]=0;
    big zp=1;
    for(int i=1;i<=18;i++){
        int t=a%10;
        a/=10;
        for(int j=0;j<=k;j++){

            get(dp[i][j][0],dp[i-1][j][0]);
            if(t!=9) get(dp[i][j][0],dp[i-1][j][1]);
            if(j!=0&&dp[i-1][j-1][0]!=-1&&t!=0) get(dp[i][j][1],dp[i-1][j-1][0]+zp*(10-t));
            if(j!=0&&dp[i-1][j-1][1]!=-1) get(dp[i][j][1],dp[i-1][j-1][1]+zp*(10-t-1));
        }
        zp=zp*10;
    }
    //pt(dp[1][1][1]);
    int l=k;       
    while(l>=0&&dp[18][l][0]==-1&&dp[18][l][1]==-1) l--;
    if(l==k){
        big k;
        if(dp[18][l][0]==-1)    k=dp[18][l][1];
        else if(dp[18][l][1]==-1)   k=dp[18][l][0];
        else k=min(dp[18][l][0],dp[18][l][1]);
        vector<int> ans;
        while(k){
            ans.push_back(k%10);
            k/=10;
        }
        int sz=ans.size();
        for(int i=sz-1;i>=0;i--)    cout<<ans[i];
        cout<<'\n';
        return ;  
    }
    else{
        big k=dp[18][l][1];
        for(int i=l+1;i<=k;i++) cout<<9;
        vector<int> ans;
        for(int i=1;i<=18;i++){
            ans.push_back(k%10);
            k/=10;
        }
        for(int i=17;i>=0;i--)    cout<<ans[i];
        cout<<'\n';
        return ;
    }
}
int main(){
    ios::sync_with_stdio(0);
    cin.tie(0);cout.tie(0);
    int _=1;
    cin>>_;
    while(_--)  solve();
    return 0;
}

Details

Tip: Click on the bar to expand more detailed information

Test #1:

score: 0
Runtime Error

input:

4
12345678 0
12345678 5
12345678 18
990099 5

output:


result: