HDU 6659 [ 2019 Multi-University Training Contest 8]

Acesrc and Good Numbers

Problem Description

Acesrc is a famous mathematician at Nanjing University second to none. Playing with interesting numbers is his favorite. Today, he finds a manuscript when cleaning his room, which reads

… Let f(d,n) denote the number of occurrences of digit d in decimal representations of integers 1,2,3,⋯,n. The function has some fantastic properties …

… Obviously, there exist some nonnegative integers k, such that f(d,k)=k, and I decide to call them d-good numbers …

… I have found all d-good numbers not exceeding 101000, but the paper is too small to write all these numbers …

Acesrc quickly recollects all d-good numbers he found, and he tells Redsun a question about d-good numbers: what is the maximum d-good number no greater than x? However, Redsun is not good at mathematics, so he wants you to help him solve this problem.

Input

The first line of input consists of a single integer q (1≤q≤1500), denoting the number of test cases. Each test case is a single line of two integers d (1≤d≤9) and x (0≤x≤1018).

Output

For each test case, print the answer as a single integer in one line. Note that 0 is trivially a d-good number for arbitrary d.

Sample Input

3
1 1
1 199999
3 0

Sample Output

1
199990
0

思路

题目定义了一个函数f(d,x),意思是将0-x所有数拆分出来,计算含有d的个数,如f(1,11)中有1,10,11,所以f(1,11)=4,并且定义了一种数为good number,表达的是f(d,x) = x,给出一个d和n,让我们找出在不大于n的最大good number。一开始打表打成傻逼,因为很晚才开这道题,然后有些d的第一个good number特别大,打了半天没打出来。后来听学长说有一个在线整数数列查询网站OEIS,d从1-9的数列在OEIS的号码分别为A014778, A101639, A101640, A101641, A130427, A130428, A130429, A130430, A130431. 然后开数组复制粘贴,需要的时候直接查就行了。

代码

#include
using namespace std;
typedef long long ll;

ll t,d,x;
ll gn[10][400] = {
/*1*/	{0,1,199981,199982,199983,199984,199985,199986,199987,199988,199989,199990,200000,200001,1599981,1599982,1599983,1599984,1599985,1599986,1599987,1599988,1599989,1599990,2600000,2600001,13199998,35000000,35000001,35199981,35199982,35199983,35199984,35199985,35199986,35199987,35199988,35199989,35199990,35200000,35200001,117463825,500000000,500000001,500199981,500199982,500199983,500199984,500199985,500199986,500199987,500199988,500199989,500199990,500200000,500200001,501599981,501599982,501599983,501599984,501599985,501599986,501599987,501599988,501599989,501599990,502600000,502600001,513199998,535000000,535000001,535199981,535199982,535199983,535199984,535199985,535199986,535199987,535199988,535199989,535199990,535200000,535200001,1111111110,-1},
/*2*/	{0,28263827,35000000,242463827,500000000,528263827,535000000,10000000000,10028263827,10035000000,10242463827,10500000000,10528263827,10535000000,-1},
/*3*/	{0,371599983,371599984,371599985,371599986,371599987,371599988,371599989,371599990,371599991,371599992,500000000,10000000000,10371599983,10371599984,10371599985,10371599986,10371599987,10371599988,10371599989,10371599990,10371599991,10371599992,10500000000,20000000000,20371599983,20371599984,20371599985,20371599986,20371599987,20371599988,20371599989,20371599990,20371599991,20371599992,20500000000,-1},
/*4*/	{0,499999984,499999985,499999986,499999987,499999988,499999989,499999990,499999991,499999992,499999993,500000000,10000000000,10499999984,10499999985,10499999986,10499999987,10499999988,10499999989,10499999990,10499999991,10499999992,10499999993,10500000000,20000000000,20499999984,20499999985,20499999986,20499999987,20499999988,20499999989,20499999990,20499999991,20499999992,20499999993,20500000000,30000000000,30499999984,30499999985,30499999986,30499999987,30499999988,30499999989,30499999990,30499999991,30499999992,30499999993,30500000000,-1},
/*5*/	{0,10000000000, 20000000000, 30000000000, 40000000000,-1},
/*6*/	{0,9500000000,9628399986,9628399987,9628399988,9628399989,9628399990,9628399991,9628399992,9628399993,9628399994,9628399995,10000000000,19500000000,19628399986,19628399987,19628399988,19628399989,19628399990,19628399991,19628399992,19628399993,19628399994,19628399995,20000000000,29500000000,29628399986,29628399987,29628399988,29628399989,29628399990,29628399991,29628399992,29628399993,29628399994,29628399995,30000000000,39500000000,39628399986,39628399987,39628399988,39628399989,39628399990,39628399991,39628399992,39628399993,39628399994,39628399995,40000000000,49500000000,49628399986,49628399987,49628399988,49628399989,49628399990,49628399991,49628399992,49628399993,49628399994,49628399995,50000000000,59500000000,59628399986,59628399987,59628399988,59628399989,59628399990,59628399991,59628399992,59628399993,59628399994,59628399995,-1},
/*7*/	{0,9465000000,9471736170,9500000000,9757536170,9965000000,9971736170,10000000000,19465000000,19471736170,19500000000,19757536170,19965000000,19971736170,20000000000,29465000000,29471736170,29500000000,29757536170,29965000000,29971736170,30000000000,39465000000,39471736170,39500000000,39757536170,39965000000,39971736170,40000000000,49465000000,49471736170,49500000000,49757536170,49965000000,49971736170,50000000000,59465000000,59471736170,59500000000,59757536170,59965000000,59971736170,60000000000,69465000000,69471736170,69500000000,69757536170,69965000000,69971736170,-1},
/*8*/	{0,9465000000,9486799989,9486799990,9486799991,9486799992,9486799993,9486799994,9486799995,9486799996,9486799997,9497400000,9498399989,9498399990,9498399991,9498399992,9498399993,9498399994,9498399995,9498399996,9498399997,9500000000,9882536171,9965000000,9986799989,9986799990,9986799991,9986799992,9986799993,9986799994,9986799995,9986799996,9986799997,9997400000,9998399989,9998399990,9998399991,9998399992,9998399993,9998399994,9998399995,9998399996,9998399997,10000000000,19465000000,19486799989,19486799990,19486799991,19486799992,19486799993,19486799994,19486799995,19486799996,19486799997,19497400000,19498399989,19498399990,19498399991,19498399992,19498399993,19498399994,19498399995,19498399996,19498399997,19500000000,19882536171,19965000000,19986799989,19986799990,19986799991,19986799992,19986799993,19986799994,19986799995,19986799996,19986799997,19997400000,19998399989,19998399990,19998399991,19998399992,19998399993,19998399994,19998399995,19998399996,19998399997,20000000000,29465000000,29486799989,29486799990,29486799991,29486799992,29486799993,29486799994,29486799995,29486799996,29486799997,29497400000,29498399989,29498399990,29498399991,29498399992,29498399993,29498399994,29498399995,29498399996,29498399997,29500000000,29882536171,29965000000,29986799989,29986799990,29986799991,29986799992,29986799993,29986799994,29986799995,29986799996,29986799997,29997400000,29998399989,29998399990,29998399991,29998399992,29998399993,29998399994,29998399995,29998399996,29998399997,30000000000,39465000000,39486799989,39486799990,39486799991,39486799992,39486799993,39486799994,39486799995,39486799996,39486799997,39497400000,39498399989,39498399990,39498399991,39498399992,39498399993,39498399994,39498399995,39498399996,39498399997,39500000000,39882536171,39965000000,39986799989,39986799990,39986799991,39986799992,39986799993,39986799994,39986799995,39986799996,39986799997,39997400000,39998399989,39998399990,39998399991,39998399992,39998399993,39998399994,39998399995,39998399996,39998399997,40000000000,49465000000,49486799989,49486799990,49486799991,49486799992,49486799993,49486799994,49486799995,49486799996,49486799997,49497400000,49498399989,49498399990,49498399991,49498399992,49498399993,49498399994,49498399995,49498399996,49498399997,49500000000,49882536171,49965000000,49986799989,49986799990,49986799991,49986799992,49986799993,49986799994,49986799995,49986799996,49986799997,49997400000,49998399989,49998399990,49998399991,49998399992,49998399993,49998399994,49998399995,49998399996,49998399997,50000000000,59465000000,59486799989,59486799990,59486799991,59486799992,59486799993,59486799994,59486799995,59486799996,59486799997,59497400000,59498399989,59498399990,59498399991,59498399992,59498399993,59498399994,59498399995,59498399996,59498399997,59500000000,59882536171,59965000000,59986799989,59986799990,59986799991,59986799992,59986799993,59986799994,59986799995,59986799996,59986799997,59997400000,59998399989,59998399990,59998399991,59998399992,59998399993,59998399994,59998399995,59998399996,59998399997,60000000000,69465000000,69486799989,69486799990,69486799991,69486799992,69486799993,69486799994,69486799995,69486799996,69486799997,69497400000,69498399989,69498399990,69498399991,69498399992,69498399993,69498399994,69498399995,69498399996,69498399997,69500000000,69882536171,69965000000,69986799989,69986799990,69986799991,69986799992,69986799993,69986799994,69986799995,69986799996,69986799997,69997400000,69998399989,69998399990,69998399991,69998399992,69998399993,69998399994,69998399995,69998399996,69998399997,70000000000,79465000000,79486799989,79486799990,79486799991,79486799992,79486799993,79486799994,79486799995,79486799996,79486799997,79497400000,79498399989,79498399990,79498399991,79498399992,79498399993,79498399994,79498399995,79498399996,79498399997,79500000000,79882536171,79965000000,79986799989,79986799990,79986799991,79986799992,79986799993,79986799994,79986799995,79986799996,79986799997,79997400000,79998399989,79998399990,79998399991,79998399992,79998399993,79998399994,79998399995,79998399996,79998399997,-1},
/*9*/	{0,10000000000,20000000000,30000000000,40000000000,50000000000,60000000000,70000000000,80000000000,-1}
};

int main() {
	cin >> t;
	while(t--) {
		cin >> d >> x;
		for(int i=0;;i++) {
			if(gn[d-1][i] == x) {
				cout << gn[d-1][i] << endl;
				break;
			}
			else if(gn[d-1][i] == -1){
				cout << gn[d-1][i-1] << endl;
				break;
			}
			else if(gn[d-1][i] > x && gn[d-1][i-1] < x) {
				cout << gn[d-1][i-1] << endl;
				break;
			}
		}
	}
}

题目来源

HDU 6659 Acesrc and Good Numbers [ 2019 Multi-University Training Contest 8]

你可能感兴趣的:(2019HDU多校赛,HDU)