QOJ.ac

QOJ

ID题目提交者结果用时内存语言文件大小提交时间测评时间
#432034#1875. NeinNaganohara_YoimiyaWA 11ms3764kbC++142.9kb2024-06-06 16:48:292024-06-06 16:48:29

Judging History

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

  • [2024-06-06 16:48:29]
  • 评测
  • 测评结果:WA
  • 用时:11ms
  • 内存:3764kb
  • [2024-06-06 16:48:29]
  • 提交

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;
}

详细

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