启示录(二分+数位dp)

编程入门 行业动态 更新时间:2024-10-22 13:51:17

<a href=https://www.elefans.com/category/jswz/34/1763394.html style=启示录(二分+数位dp)"/>

启示录(二分+数位dp)

古代人认为666是属于魔鬼的数。

不但如此,只要某数字的十进制表示中有三个连续的6,古代人也认为这是个魔鬼的数,比如666,1666,6663,16666,6660666等等。

古代典籍中经常用“第X小的魔鬼的数”来指代这些数,这给研究人员带来了极大的不便。

现在请编写一个程序,可以实现输入X,输出对应的魔鬼数。

输入格式

第一行包含整数T,表示共有T组测试数据。

每组测试数据占一行,包含一个整数X。

输出格式

每组测试数据占一行,输出一个魔鬼数。

数据范围

1≤T≤1000,
1≤X≤5∗107

输入样例:

3
2
3
187

输出样例:

1666
2666
66666

思路:(二分+数位dp) 

首先,总体上就是二分1-1<<63-1中第一个包含的魔鬼数个数=x的数,即:个数=x且最小的数即为第x个魔鬼数

在二分的判断条件中,要找当前数包含的魔鬼数个数,这里可以采用容斥原理+数位dp统计,即:

当前数n包含的魔鬼数个数 = 当前数包含的数(1-n)的总数n - n包含的数中的非魔鬼数个数

然后用数位dp统计n包含的数中的非魔鬼数个数即可。

现学了一下数位dp,大体理解了其模板,总结一下,我认为就是:

更多推荐

启示录(二分+数位dp)

本文发布于:2024-03-09 10:19:58,感谢您对本站的认可!
本文链接:https://www.elefans.com/category/jswz/34/1724710.html
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。
本文标签:启示录   数位   dp

发布评论

评论列表 (有 0 条评论)
草根站长

>www.elefans.com

编程频道|电子爱好者 - 技术资讯及电子产品介绍!