Problem
问题描述:
有两个没有前导$0$的$n$位十进制数$A$和$B$。我们需要找到两个最接近$A$的$n$位数(第1个大于等于$A$,第二小于$A$),包含B的所有数字。
例如,如果$A=3022$,$B=1232$,采用$B$的数字,我们可以得到以下$4$位数:$1223$,$1232$,$1322$,$2123$,$2132$,$2213$,$2231$,$2312$,$2321$,$3122$,$3212$和$3221$。
最小的大于等于$A$是$3122$,最大小于$A$的是$2321$。
如果$A=1232$,而$B=3022$,可能的$4$位数是$2023$,$2032$,$2203$,$2230$,$2302$,$2320$,$3022$,$3202$和$3220$。
最小的大于等于$A$是$3122$,最大小于$A$的是$2023$。不存在小于$4$的数。
编写程序,对于给定的$A$和$B$,找出最接近$A$的包含$B$的所有数字的数,或者确定其中一个是不存在的。
输入格式:
输入两行,都是没有前导$0$的$n(1≤n≤60)$位正整数,第一行是$A$,第二行是$B$。
输出格式:
输出两行,每行一个十进制数。
第1行是最小的大于等于$A$的没有前导$0$的,包含$B$所有数字的$n$位十进制数。如果这样的数不存在,则输出$0$。
第2行是最大的小于$A$的没有前导$0$的,包含$B$所有数字的$n$位十进制数。如果这样的数不存在,则输出$0$。
样例输入输出:
1 | Input #1 |
1 | Output #1 |
1 | Input #2 |
1 | Output #2 |
Solution
本题难度不高。
很容易想到,既然越接近越好,那么就一位一位匹配,能匹配上就用,如果发现完成不了回溯就行了。
这题主要是注意下细节,调试可能比较烦,算法很简单,耐心做就OK了。
具体算法详见代码。
1 |
|
Data
评测请至洛谷SP3889。