O(log10n a2b2) 过了 ⋯
#include<bits/stdc++.h>
using namespace std;
#define int long long
#define debug() cout<<"come on"<<'\n'
#define mkp make_pair
string n;
int a,b;
string dp[105][105];
string dx(string a,string b){
if(a.length()!=b.length())return a.length()>b.length()?a:b;
return a>b?a:b;
}
map<pair<char,int>,char> mp1,mp2;
signed main(){
cin>>n>>a>>b;
for(char i='0';i<='8';i++)mp1[mkp(i,1)]=i+1;
mp1[mkp('9',1)]='0';
for(char i='1';i<='9';i++)mp2[mkp(i,1)]=i-1;
mp2[mkp('0',1)]='9';
for(char i='0';i<='9';i++){
for(int p=2;p<=18;p++){
char x=mp1[mkp(i,p-1)],xx=mp2[mkp(i,p-1)];
mp1[mkp(i,p)]=mp1[mkp(x,1)];
mp2[mkp(i,p)]=mp2[mkp(xx,1)];
}
}
for(int i=0;i<=a;i++){
for(int j=0;j<=b;j++){
dp[i][j]="";
}
}
dp[0][0]=n;
for(int i=0;i<=a;i++){
for(int j=0;j<=b;j++){
for(int k=0;k<dp[i][j].size();k++){
for(int ci=1;ci<=a-i;ci++){
string x=dp[i][j];
x[k]=mp1[mkp(x[k],ci)];
dp[i+ci][j]=dx(dp[i+ci][j],dx(x,dp[i][j]));
// cout<<"i "<<i<<" "<<ci<<" "<<dp[i][j]<<" "<<k<<" "<<x<<'\n';
}
for(int ci=1;ci<=b-j;ci++){
string x=dp[i][j];
x[k]=mp2[mkp(x[k],ci)];
dp[i][j+ci]=dx(dp[i][j+ci],dx(x,dp[i][j]));
// cout<<"j "<<j<<" "<<ci<<" "<<dp[i][j]<<" "<<k<<" "<<x<<'\n';
}
}
}
}
cout<<dp[a][b];
return 0;
}