QOJ.ac
QOJ
ID | Problem | Submitter | Result | Time | Memory | Language | File size | Submit time | Judge time |
---|---|---|---|---|---|---|---|---|---|
#296371 | #6300. Best Carry Player 2 | HJR | TL | 1ms | 3784kb | C++23 | 3.1kb | 2024-01-02 20:20:14 | 2024-01-02 20:20:15 |
Judging History
answer
#include<bits/stdc++.h>
using namespace std;
#define endl "\n"
#define debug(x) cout<<#x<<": "<<x<<endl
mt19937_64 rng(chrono::steady_clock::now().time_since_epoch().count());
using ll=long long;
using ull=unsigned long long;
#define int long long
using i128 = __int128;
void print(__int128 x)
{
if (x < 0)
{
cout<<('-');
x = -x;
}
if (x > 9)
print(x / 10);
char ch=(x % 10 + '0');
cout<<ch;
}
__int128 c10[40];
__int128 nu[10];
int x,k;
string s;
int n;
__int128 res,now;
string cur;
int cnt;
int dp[40];
int vis[40][40][2];
void dfs(int i,int carry){
if(cnt>k||i>36)
return;
if(res<now&&res!=0)
return;
// if(vis[i][cnt][carry])
// return;
vis[i][cnt][carry]=1;
if((!carry&&cnt==k)||(carry&&cnt+dp[i]==k)){
if(res==0)
res=now;
else
res=min(res,now);
return;
}
if(carry&&s[i]=='9'){
cur+='0';
cnt++;
dfs(i+1,1);
cnt--;
cur.pop_back();
return;
}
//jin
if(carry){
int ad=10-(s[i]-'0'+1);
cur+='0'+ad;
cnt++;
now+=nu[ad]*c10[i];
dfs(i+1,1);
now-=nu[ad]*c10[i];
cnt--;
cur.pop_back();
}
else{
int ad=10-(s[i]-'0');
if(ad!=10){
cur+='0'+ad;
cnt++;
now+=nu[ad]*c10[i];
dfs(i+1,1);
now-=nu[ad]*c10[i];
cnt--;
cur.pop_back();
}
}
// //no jin
cur+='0';
dfs(i+1,0);
cur.pop_back();
};
void solve(){
cin>>x>>k;
s=to_string(x);
n=s.size();
if(k==0){
string cur;
for(int i=s.size()-1;i>=0;i--){
if(s[i]!='9'){
cur+='1';
reverse(cur.begin(),cur.end());
cout<<cur<<endl;
return;
}
else{
cur+='0';
}
}
cur+='1';
reverse(cur.begin(),cur.end());
cout<<cur<<endl;
return;
}
res=0;
now=0;
reverse(s.begin(),s.end());
for(int i=0;i<40;i++)
s+='0';
cur="";
cnt=0;
memset(dp,0,sizeof dp);
for(int i=0;i<40;i++){
int cc=0;
for(int j=i;j<40;j++){
if(s[j]=='9')
cc++;
else
break;
}
dp[i]=cc;
}
now=0;
memset(vis,0,sizeof vis);
dfs(0,0);
print(res);
cout<<endl;
}
signed main(){
ios::sync_with_stdio(0);
cout.tie(0);
cin.tie(0);
c10[0]=1;
__int128 ten=10;
for(int i=1;i<40;i++){
c10[i]=c10[i-1]*ten;
}
for(int i=0;i<10;i++)
nu[i]=i;
int t;
cin>>t;
while(t--){
solve();
}
}
Details
Tip: Click on the bar to expand more detailed information
Test #1:
score: 100
Accepted
time: 1ms
memory: 3784kb
input:
4 12345678 0 12345678 5 12345678 18 990099 5
output:
1 54322 999999999987654322 9910
result:
ok 4 lines
Test #2:
score: 0
Accepted
time: 1ms
memory: 3756kb
input:
21 999990000099999 0 999990000099999 1 999990000099999 2 999990000099999 3 999990000099999 4 999990000099999 5 999990000099999 6 999990000099999 7 999990000099999 8 999990000099999 9 999990000099999 10 999990000099999 11 999990000099999 12 999990000099999 13 999990000099999 14 999990000099999 15 999...
output:
100000 10000 1000 100 10 1 900001 9900001 99900001 999900001 10000000001 9999910000 9999901000 9999900100 9999900010 9999900001 9000009999900001 99000009999900001 999000009999900001 99999999999999999900000000000000000 1000000000000000000
result:
ok 21 lines
Test #3:
score: -100
Time Limit Exceeded
input:
100000 119111011091190000 10 1911011191011999 16 110099199000119 0 19009911191091011 13 199090909919000900 17 19009010011919110 5 90910190019900091 18 10911100000101111 1 110090011101119990 4 100909999119090000 12 90901119109011100 2 111010119991090101 4 900991019109199009 5 100919919990991119 8 911...
output:
88988908810000 8088988808988001 10 88808908989 9800909090080999100 80890 909089809980099909 9 80010 9090000880910000 8900 9909 991 9008900 8880880090 8080090801 8009900808909899 80880898981 909 8800909 99988889901 89908888089 980908890980099000 100 9889801 81 908890008099900891 880990801 9998099 890...