99442024-03-20 22:59:34111Számlexikoncpp17Időlimit túllépés 60/100298ms3508 KiB
#include <bits/stdc++.h>
using namespace std;

#define int long long

int E(int n,int k){
	if(n==0){
		return 0;
	}
	if(k==0){
		return n;
	}
	int l=1;
	while(l*10<=k){
		l*=10;
	}
	int j=1;
	while(j*10<=n){
		j*=10;
	}
	int ans=0;
	while(true){
		while(l>0&&j>0&&k/l==n/j){
			k-=k/l*l;
			n-=n/j*j;
			l/=10;
			j/=10;
		}
		if(j==0||l>0&&k/l>n/j){
			return ans;
		}
		if(l==0){
			ans+=n+1;
			return ans;
		}
		for(int i=l>0?k/l+1:0;i<n/j;i++){
			ans+=j;
		}
		ans+=n%j+1;
		n=j-1+k/l*j;
	}
}

int H(int n,int k){
	if(n==0){
		return 0;
	}
	int j=1;
	while(j*10<=n){
		j*=10;
	}
	int ans=E(n,k);
	while(j>0){
		ans+=E(j-1,k);
		j/=10;
	}
	return ans;
}

signed main() {
	ios::sync_with_stdio(0);
	cin.tie(0);
#ifdef CB
	freopen("be2.txt","r",stdin);
//	freopen("out.txt","w",stdout);
#endif
	int T;
	cin>>T;
	while(T--){
		int K,P;
		cin>>K>>P;
		int l=K,h=1e18;
		while(l!=h){
			int m=(l+h)/2;
			if(m-H(m,K)>=P){
				h=m;
			}
			else{
				l=m+1;
			}
		}
		cout<<(h-H(h,K)!=P?0:h)<<'\n';
	}
	return 0;
}
RészfeladatÖsszpontTesztVerdiktIdőMemória
base60/100
1Elfogadva0/04ms1888 KiB
2Időlimit túllépés0/0298ms1460 KiB
3Elfogadva10/103ms2436 KiB
4Elfogadva10/103ms2624 KiB
5Elfogadva10/1012ms2852 KiB
6Elfogadva10/108ms2944 KiB
7Elfogadva10/1010ms3072 KiB
8Elfogadva10/1024ms3296 KiB
9Időlimit túllépés0/10261ms3380 KiB
10Időlimit túllépés0/10261ms3508 KiB
11Időlimit túllépés0/10270ms2916 KiB
12Időlimit túllépés0/10261ms3180 KiB