QOJ.ac
QOJ
ID | Problem | Submitter | Result | Time | Memory | Language | File size | Submit time | Judge time |
---|---|---|---|---|---|---|---|---|---|
#432034 | #1875. Nein | Naganohara_Yoimiya | WA | 11ms | 3764kb | C++14 | 2.9kb | 2024-06-06 16:48:29 | 2024-06-06 16:48:29 |
Judging History
answer
#include<bits/stdc++.h>
#define ll long long
#define mk make_pair
#define fi first
#define se second
using namespace std;
template<typename T>void cmax(T &x,T v){x=max(x,v);}
template<typename T>void cmin(T &x,T v){x=min(x,v);}
const ll INF=3e18;
const int M=500;
int k,ii,jj;ll n;
ll dp[2][M+5];
void add(ll &x,ll v){x=min(x+v,INF);}
ll calc(vector<vector<int> >vec,vector<int>tar){
// cout<<"calc tar = ";for(int i=tar.size()-1;i>=0;i--)cout<<tar[i];cout<<" ";
int m=vec.size(),cur=0;
memset(dp,0,sizeof(dp));
dp[cur][0]=1;
for(int i=0;i<tar.size();i++){
for(int j=0;j<m;j++){
if(i<k){
memset(dp[cur^1],0,sizeof(dp[cur^1]));
if(vec[j][i]==-1){
for(int s=0;s<=M;s++)if(dp[cur][s]){
int st=0;
if(j==ii&&i==jj)st=1;
for(int c=st;c<=8;c++)add(dp[cur^1][s+c],dp[cur][s]);
}
}
else{
assert(vec[j][i]!=9);
for(int s=0;s<=M;s++)if(dp[cur][s]){
add(dp[cur^1][s+vec[j][i]],dp[cur][s]);
}
}
cur^=1;
}
}
memset(dp[cur^1],0,sizeof(dp[cur^1]));
for(int s=tar[i];s<=M;s+=10)if(dp[cur][s]){
add(dp[cur^1][s/10],dp[cur][s]);
}
cur^=1;
}
// cout<<"ans = "<<dp[cur][0]<<endl;
return dp[cur][0];
}
#define i128 __int128
ll getnum(vector<int>A){
// cout<<"getnum A = ";for(int x:A)cout<<x<<" ";puts("");
int len=A.size(),m=((len-1)/k)+1;
vector<vector<int> >vec(m,vector<int>(k));
for(int i=0;i<A.size();i++){
int c=A[len-i-1];
vec[i/k][i%k]=c;
if(i==len-1)ii=(int)(i/k),jj=(int)(i%k);
}
i128 O=1;for(int i=1;i<=k;i++)O*=10;O--;
ll ans=0;
for(int t=1;t<=30;t++){
i128 P=O*t;
vector<int>tar;
while(P)tar.emplace_back(P%10),P/=10;
add(ans,calc(vec,tar));
}
// cout<<"now n = "<<n<<" result = "<<ans<<endl;
// const int W=99999;
// vector<vector<ll> >f(2,vector<ll>(W,0));
// int cur=0;f[cur][0]=1;
// for(int i=0;i<A.size();i++){
// fill(f[cur^1].begin(),f[cur^1].end(),0);
// if(A[i]!=-1){
// for(int s=0;s<W;s++)if(f[cur][s])add(f[cur^1][(s*10+A[i])%W],f[cur][s]);
// }
// else{
// for(int s=0;s<W;s++)if(f[cur][s]){
// for(int c=(i==0);c<=8;c++)
// }
// }
// }
return ans;
}
signed main(void){
#ifndef ONLINE_JUDGE
freopen("in.txt","r",stdin);
#endif
cin>>k>>n;
// vector<int>AA(12,-1);
// AA[0]=2,AA[1]=0;
// getnum(AA);return 0;
int ansl=0;
for(int len=1;len<=30;len++){
vector<int>A(len,-1);
ll now=getnum(A);
if(now>=n){ansl=len;break;}
else n-=now;
}
// cout<<"ansl = "<<ansl<<" n = "<<n<<endl;
vector<int>A(ansl,-1);
for(int i=0;i<ansl;i++){
for(int c=(i==0);c<=8;c++){
A[i]=c;ll now=getnum(A);
if(now>=n)break;
else n-=now;
}
}
i128 O=0,P=1;
for(int i=0;i<ansl;i++)O=O*10+A[i];
for(int i=1;i<=k;i++)P=P*10;P--;
O/=P;
vector<int>oo;
while(O)oo.emplace_back(O%10),O/=10;
reverse(oo.begin(),oo.end());for(int i:oo)cout<<i;puts("");
return 0;
}
Details
Tip: Click on the bar to expand more detailed information
Test #1:
score: 100
Accepted
time: 1ms
memory: 3764kb
input:
1 1
output:
2
result:
ok answer is '2'
Test #2:
score: 0
Accepted
time: 1ms
memory: 3748kb
input:
1 8
output:
9
result:
ok answer is '9'
Test #3:
score: 0
Accepted
time: 0ms
memory: 3532kb
input:
1 9
output:
12
result:
ok answer is '12'
Test #4:
score: 0
Accepted
time: 1ms
memory: 3580kb
input:
1 10
output:
13
result:
ok answer is '13'
Test #5:
score: 0
Accepted
time: 8ms
memory: 3552kb
input:
5 1
output:
11112
result:
ok answer is '11112'
Test #6:
score: 0
Accepted
time: 8ms
memory: 3528kb
input:
5 84
output:
11235
result:
ok answer is '11235'
Test #7:
score: 0
Accepted
time: 8ms
memory: 3564kb
input:
5 668
output:
12345
result:
ok answer is '12345'
Test #8:
score: 0
Accepted
time: 11ms
memory: 3556kb
input:
5 733942
output:
2281488
result:
ok answer is '2281488'
Test #9:
score: -100
Wrong Answer
time: 9ms
memory: 3524kb
input:
18 528599760553218747
output:
result:
wrong output format Unexpected end of file - token expected