数位DP -启示录
http://poj.org/problem?id=3208
一个魔鬼数为包含连续三个666的的数字,给个n(n<5e7)求第n个魔鬼数。
预处理f[i][j],f[i][3]表示由前i位数字构成所有可能的魔鬼数,需要注意这里允许前导0存在。
f[i][2]表示由i位数字构成的开头为2个6的非魔鬼数个数,
f[i][1]表示由i位数字构成的开头为1个6的非魔鬼数个数,
f[i][3]表示由i位数字构成的开头为3个6的魔鬼数个数,
之后从高位到低位填每个数,每个数从小到大枚举。
#include <cstdio>
#include <iostream>
using namespace std;
#define LL long long
LL f[][];
void init()
{
// f[1][1]=1;
// f[1][0]=9;
f[][]=;
for(int i=; i<=; i++)
{
f[i][]=(f[i-][]+f[i-][]+f[i-][])*;
f[i][]=f[i-][];
f[i][]=f[i-][];
f[i][]=f[i-][]+f[i-][]*;
}
} int main()
{
int t;
scanf("%d",&t);
init();
// for(int i=1; i<=15; i++)
// printf("%d ",f[i][3]);
while(t--)
{
int n;
scanf("%d",&n);
int p;
for(p=; f[p][]<n; p++);
int cnk=;
for(; p>=; p--)
{
for(int j=; j<=; j++)
{
int sum=;
if(j==||cnk>=)
{
int t=cnk+;
if(t>=) sum+=f[p-][]+f[p-][]+f[p-][];
else if(t==) sum+=f[p-][]+f[p-][];
else sum+=f[p-][];
sum+=f[p-][];
}
else
sum=f[p-][];
if(sum<n)
n-=sum;
else
{
if(j==)
cnk++;
else if(cnk<)
cnk=;
printf("%d",j);
break;
}
}
}
printf("\n");
}
}
数位DP -启示录的更多相关文章
- poj3208启示录——数位DP
题目:http://poj.org/problem?id=3208 数位DP,首先按位数预处理出每一种位数的情况,包括有多少个魔鬼数和有多少个以6开头的非魔鬼数,以便递推.累加等等: 然后先找出第X个 ...
- bzoj3209 花神的数论题——数位dp
题目大意: 花神的题目是这样的 设 sum(i) 表示 i 的二进制表示中 1 的个数.给出一个正整数 N ,花神要问你 派(Sum(i)),也就是 sum(1)—sum(N) 的乘积. 要对1000 ...
- 【BZOJ1662】[Usaco2006 Nov]Round Numbers 圆环数 数位DP
[BZOJ1662][Usaco2006 Nov]Round Numbers 圆环数 Description 正如你所知,奶牛们没有手指以至于不能玩"石头剪刀布"来任意地决定例如谁 ...
- bzoj1026数位dp
基础的数位dp 但是ce了一发,(abs难道不是cmath里的吗?改成bits/stdc++.h就过了) #include <bits/stdc++.h> using namespace ...
- uva12063数位dp
辣鸡军训毁我青春!!! 因为在军训,导致很长时间都只能看书yy题目,而不能溜到机房鏼题 于是在猫大的帮助下我发现这道习题是数位dp 然后想起之前讲dp的时候一直在补作业所以没怎么写,然后就试了试 果然 ...
- HDU2089 不要62[数位DP]
不要62 Time Limit: 1000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others)Total Submis ...
- 数位DP GYM 100827 E Hill Number
题目链接 题意:判断小于n的数字中,数位从高到低成上升再下降的趋势的数字的个数 分析:简单的数位DP,保存前一位的数字,注意临界点的处理,都是套路. #include <bits/stdc++. ...
- 数位dp总结
由简单到稍微难点. 从网上搜了10到数位dp的题目,有几道还是很难想到的,前几道基本都是模板题,供入门用. 点开即可看题解. hdu3555 Bomb hdu3652 B-number hdu2089 ...
- 数位DP入门
HDU 2089 不要62 DESC: 问l, r范围内的没有4和相邻62的数有多少个. #include <stdio.h> #include <string.h> #inc ...
随机推荐
- @Autowired和@Resource注解的一个意外重要区别
今天上午,因为公司要跟客户展示最近开发的项目,然后安排了我重新构建一个template项目,用来向客户展示参考.基于已开发好的代码,我在进行一些简化抽取的时候出现了一个有趣的问题 因为我们有一个spr ...
- 服务器 隐藏php版本,nginx版本号等
隐藏php版本号: 打开php.ini配置文件 找到 expose_php 关键修改为 off 即可 重启后 web头部就不会有了 隐藏 nginx 服务器版本号: 打开nginx配置文件,在htt ...
- 百度杯”CTF比赛 2017 二月场 没错!就是文件包含漏洞。
题目源码: 文件包含漏洞的话,看一下 你么可以使用php://input 伪协议,执行代码(参考了大佬WP)这里使用了POSTMAN, 目录下还有一个dle345aae.php文件,呢么用cat命令打 ...
- selenium采用find_element_by方法识别页面元素
主要是练习获取页面中的各元素,马克 # coding:utf-8 import time from selenium import webdriver import unittest from pyt ...
- 安装 python pip Django
python 安装 1. 官网下载:以 window 为例,按提示下载,版本号根据实际需求选择: 2. 选择路径,安装完成后,命令行输入 python 检测是否安装成功,下图为安装成功显示:quit( ...
- nginx,作为前端的你会多少?
--现在阅读的你,如果是个FE,相信你不是个纯切图仔.反之,如果是,该进阶了,老铁! 前端的我们,已经不仅仅是做页面,写样式了,我们还需要会做相关的服务器部署.废话不多说,下面就从前端的角度来讲以下n ...
- java程序设计第二次作业
- 64位windows8.1下安装 ImageMagick 总结
1. 安装 ImageMagick-6.7.7-Q16-x64 下载地址:http://ftp.sunet.se/pub/multimedia/graphics/ImageMagick/binari ...
- python 的os.getenv("PATH")和os.environ.get("PATH")的区别
os.environ(x [,x]) raises an exception if the environmental variable does not exist. os.getenv(x) do ...
- 使用腾讯云服务器CentOS搭建JavaWeb环境
yum list java* yum install java-1.7.0-openjdk* -y java -version cd /usr/local wget https://mc.qcloud ...