题意:给定n,输出第n大包含666的数字。

分析:数位dp,详见《算法竞赛进阶指南》P342-344。

代码:

#include<iostream>
#include<cstdio>
#include<cstring>
#include<algorithm>
using namespace std;
long long f[21][4];
int t, n, m;void prework() {f[0][0] = 1;for (int i = 0; i < 20; i++) {for (int j = 0; j < 3; j++) {f[i + 1][j + 1] += f[i][j];f[i + 1][0] += f[i][j] * 9;}f[i + 1][3] += f[i][3] * 10;}
}int main() {prework();cin >> t; // 数据组数while (t--) {scanf("%d", &n); // 题目中的X// 第n个魔鬼数有m位for (m = 3; f[m][3] < n; m++);// 试填第i位,末尾已有k个6(k=3也表示已经是魔鬼数)for (int i = m, k = 0; i; i--) {// 从小到大枚举第i位填的数字jfor (int j = 0; j <= 9; j++) {// 求出后边的i-1位有多少种填法能让整个数是魔鬼数long long cnt = f[i - 1][3];if (j == 6 || k == 3)for (int l = max(3 - k - (j == 6), 0); l<3; l++)cnt += f[i - 1][l];// 如果cnt比n小,说明第n个魔鬼数的第i位应该比j更大if (cnt < n) {n -= cnt;}// 否则,第i位就应该是jelse {if (k < 3) {if (j == 6) k++; else k = 0;}printf("%d", j);break;}}}printf("\n");}return 0;
}

poj 3208 Apocalypse Someday(数位dp)相关推荐

  1. poj 3208 Apocalypse Someday 数位dp+二分答案

    Apocalypse Someday Time Limit: 1000MS   Memory Limit: 131072K Total Submissions: 2203   Accepted: 11 ...

  2. Poj 3208 Apocalypse Someday(数位dp + 二分)

    题目大意:   有三个连续的6在一起的数就是beast数,前几个beast数是:666,1666,2666,-   T组数据,每组询问排名为n的beast的数是什么? 解题思路 第一眼看到懵逼了,不是 ...

  3. #数位dp#poj 3208 Apocalypse Someday

    题目 定义一种神奇的数当且仅当数位上至少有3个6,问第n个神奇的数是多少 分析 那么可以预处理出由i位数字构成的魔鬼/非魔鬼数, f[i][0]=9∗(f[i−1][0]+f[i−1][1]+f[i− ...

  4. POJ 3208 Apocalypse Someday

    HyperlinkHyperlinkHyperlink http://poj.org/problem?id=3208 DescriptionDescriptionDescription 定义包含三个连 ...

  5. POJ - 3252 Round Numbers(数位dp)

    题目链接:点击查看 题目大意:规定一个数如果二进制中0的个数大于等于1的个数,则这个数称为"整数",问闭区间a,b中有多少个整数 题目分析:数位dp,dp[pos][c0][c1] ...

  6. 解题报告 (十四) 数位DP

    文章目录 数位DP 解题报告 HDU 4722 Good Numbers HDU 2089 不要62 HDU 3555 Bomb HDU 3652 B-number PKU 3252 Round Nu ...

  7. poj3208 Apocalypse Someday (数位dp + 二分)

    The number 666 is considered to be the occult "number of the beast" and is a well used num ...

  8. 数位DP———POJ 3208 启示录

    POJ3208 启示录 题目传送门 题目大意:我们称只要某数字的十进制表示中有三个连续的6,我们就称它为"魔鬼数",比如:666,1666,6663,16666 等.现给出一个数X ...

  9. POJ 3252 数位DP

    链接: http://poj.org/problem?id=3252 题意: 给你一个区间l,r,求区间中有多少个数转化为二进制后1的个数大于等于0的个数 题解: 还是数位dp,不过多了前导0的判断 ...

最新文章

  1. 飞书与IAI国际广告奖,协同实现国内营销史上的创新“云终审”
  2. 四舍五入到小数点后两位[重复]
  3. 开发:随笔记录之 Json字符串和对象的相互转换
  4. a标签的href与onclick中使用js的区别
  5. 晨哥真有料丨为什么女生从来不主动找你聊天
  6. 设计模式1-简单工厂模式
  7. android listview多线程刷新各自的进度,从另一个线程更新主线程中的ListView
  8. 【linux多线程】c++多线程的几种创建方式
  9. Java数组之冒泡排序
  10. android+vmware+wifi,笔记本使用wifi通过vmware workstation+openwrt 实现上网
  11. Intel 处理器型号数字和字母含义解析
  12. Android Remote Service
  13. 天翼光猫虚拟服务器怎么设置,电信光猫设置经验图解手把手教你(超级详细),换光猫怎么重新设置...
  14. 整理文件夹保存同一目录,并统一重命名文件夹名
  15. 基于运放的滤波电路设计
  16. python编写程序、实现一个数字金字塔_python实现输入任意一个大写字母生成金字塔的示例...
  17. 一篇文章了解LSTM
  18. 【Qt】实现一个计算器
  19. ue4打包安卓发送udp报文_UE4 安卓打包问题 SOS
  20. 中富金石:A股新年首日中药股大涨,元宇宙成全新投资主线

热门文章

  1. C#--Link to sql语法大全
  2. 及时总结工作中的经验是个人成长的关键
  3. 华为起诉美国政府,曝其服务器曾被美国政府入侵
  4. vue+jQuery
  5. 用python做名片_Linux下python制作名片示例
  6. 马云的“野心”,阿里的区块链布局
  7. 二叉树的递归遍历(树UVa548 紫书p155)
  8. 牛客网SQL实战二刷 | Day10
  9. 还不错的星座运势小程序源码下载+云开发无需服务器
  10. 集思录封闭基金数据python爬取写入excel表