刷题刷出新高度,偷偷领先!偷偷领先!偷偷领先! 关注我们,悄悄成为最优秀的自己!

简答题

比k大的数

【题目描述】

一个不含0的n位数,其中值等于i的数码有ci个(1≤i≤9)。

在这个n位数的所有可能的值中,比k大的值最小是多少?

【输入格式】

第1行,2个正整数n,k。

第2行,9个非负整数c1,c2,…,c9,分别表示1~9的个数。

【输出格式】

输出所有可能的值中,比k大的值的最小值。

如果没有比k大的值,输出-1。


【输入样例1】

3 213

1 1 1 0 0 0 0 0 0

【输出样例1】

231

【输入样例2】

4 4000

1 0 2 1 0 0 0 0 0

【输出样例2】

4133 

【输入样例3】

3 9999

1 1 1 0 0 0 0 0 0

【输出样例3】

-1

【输入样例4】

21 791823456795285473500

1 2 2 3 2 3 2 3 3

【输出样例4】

791823456795286344689 

【样例1说明】

有1个1、1个2、1个3,可能的值有123,132,213,231,312,321,共6个。其中,比k=213 大的最小值是231。

【样例2说明】

有1个1、2个3、1个4,可能的值有

1334,1343,1433,3134,3143,3314,3341,3413,3431,4133,4313,4331共12个。其中,比k=4000 大的最小数是4133。

【样例3说明】

有1个1、1个2、1个3,可以得到的最大值321都比k=9999小,所以无法得到比k大的值。

【样例4说明】

输入输出可能超过64位整数类型范围。

【数据范围】

对于25%的数据,n≤9;k≤109

对于50%的数据,n≤200;k≤10200

对于100%的数据,1≤n≤500000;1≤k≤10500001

Ci ≥0,C1+C2+C3+C4+C5+C6+C7+C8+C9=n。

使用微信搜索喵呜刷题,轻松应对考试!

答案:

对于每个样例,我们需要根据给定的数码个数和顺序,构造出所有可能的n位数,并找出比k大的最小值。对于每个样例,我们可以按照以下步骤进行:1. 根据给定的数码个数和顺序,构造出所有可能的n位数。2. 将这些数按照从小到大的顺序排序。3. 从排序后的数列中,找到比k大的最小值。对于样例1,构造出的所有可能的3位数有:123,132,213,231,312,321。其中,比k=213大的最小值是231。对于样例2,构造出的所有可能的4位数有:1334,1343,1433,3134,3143,3314,3341,3413,3431,4133,4313,4331。其中,比k=4000大的最小数是4133。对于样例3,构造出的所有可能的3位数有:123,132,213,231,312,321。这些数都比k=9999小,所以无法得到比k大的值,输出-1。对于样例4,由于输入输出可能超过64位整数类型范围,需要使用高精度算法进行计算。

解析:

【喵呜刷题小喵解析】:
本题是一道构造题,需要根据给定的数码个数和顺序,构造出所有可能的n位数,并找出比k大的最小值。对于每个样例,我们需要按照一定的规则构造出所有可能的n位数,然后对这些数进行排序,并找到比k大的最小值。

对于样例1和样例2,我们可以直接构造出所有可能的n位数,并对这些数进行排序,然后找到比k大的最小值。

对于样例3,由于构造出的所有可能的3位数都比k=9999小,所以无法得到比k大的值,输出-1。

对于样例4,由于输入输出可能超过64位整数类型范围,需要使用高精度算法进行计算。在实际计算中,我们可以使用字符串来表示每个数,并按照一定的规则进行排序和比较,从而找到比k大的最小值。

需要注意的是,在实际计算中,由于数字的范围非常大,可能会出现精度问题。因此,我们需要使用高精度算法来确保计算的准确性。同时,由于n的取值范围非常大,我们也需要使用高效的算法来构造所有可能的n位数,并进行排序和比较。
创作类型:
原创

本文链接:比k大的数 【题目描述】 一个不含0的n位数,其中值等于i的数码有ci个(1≤i≤9)。 在这个n位

版权声明:本站点所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明文章出处。

让学习像火箭一样快速,微信扫码,获取考试解析、体验刷题服务,开启你的学习加速器!

分享考题
share