poj3208 Apocalypse Someday 数位dp+二分 求第K(K <= 5*107)个有连续3个6的数。
- /**
- 题目:poj3208 Apocalypse Someday
- 链接:http://poj.org/problem?id=3208
- 题意:求第K(K <= 5*107)个有连续3个6的数。
- 思路:数位dp+二分。
- dp[i][j]表示长度为i,前缀状态为j时含有的个数。
- j=0表示含有前导0;
- j=1表示前缀连续1个6
- j=2表示前缀连续2个6
- j=3表示前缀连续3个6
- j=4表示前缀不是6;
- */
- //#include<bits/stdc++.h>
- #include<cstring>
- #include<cstdio>
- #include<iostream>
- #include<map>
- #include<algorithm>
- #include<queue>
- using namespace std;
- #define P pair<int,int>
- #define ms(x,y) memset(x,y,sizeof x)
- #define LL long long
- const int maxn = ;
- const int mod = 1e9+;
- const int maxnode = *+;
- const int sigma_size = ;
- const LL inf = 1e18;
- int digit[];
- LL dp[][];///0表示前导0,1表示前缀一个6,2表示前缀2个6,3表示前缀3个6,4表示前缀不是6;
- int next_state(int state,int x)
- {
- if(state==) return ;
- if(x==){
- if(state==||state==) return state+;
- else return ;
- }else
- {
- return ;
- }
- }
- LL dfs(int len,int state,int bounded)
- {
- if(len==){
- return state==;
- }
- if(!bounded&&dp[len][state]!=-) return dp[len][state];
- int d = bounded?digit[len]:;
- LL ans = ;
- for(int i = ; i <= d; i++){
- if(state==){
- if(i==) ans += dfs(len-,,bounded&&(i==d));
- else ans += dfs(len-,i==?:,bounded&&(i==d));
- }else
- {
- ans += dfs(len-,next_state(state,i),bounded&&(i==d));
- }
- }
- if(!bounded){
- dp[len][state] = ans;
- }
- return ans;
- }
- LL solve(LL n)
- {
- int len = ;
- while(n){
- digit[++len] = n%;
- n /= ;
- }
- return dfs(len,,true);
- }
- int main()
- {
- int T;
- ms(dp,-);
- cin>>T;
- while(T--)
- {
- int n;
- scanf("%d",&n);
- LL lo = , hi = inf, mi;
- while(lo<hi){
- mi = (lo+hi)/;
- LL ans = solve(mi);
- if(ans>=n){///找下界。
- hi = mi;
- }else
- {
- lo = mi+;
- }
- }
- printf("%lld\n",hi);
- }
- return ;
- }
- /*
- */
poj3208 Apocalypse Someday 数位dp+二分 求第K(K <= 5*107)个有连续3个6的数。的更多相关文章
- poj3208 Apocalypse Someday[数位DP]
数位中出现至少3个连续的'6'的数字(称魔鬼数),询问满足要求的排名k的数. 经典题型.采用试填法. 递推做法:预处理出$i$位数字中满足要求的数(下记为'魔鬼数').对每一位都从0到9试一遍,然而卡 ...
- POJ 3689 Apocalypse Someday [数位DP]
Apocalypse Someday Time Limit: 1000MS Memory Limit: 131072K Total Submissions: 1807 Accepted: 87 ...
- POJ3208 Apocalypse Someday(二分 数位DP)
数位DP加二分 //数位dp,dfs记忆化搜索 #include<iostream> #include<cstdio> #include<cstring> usin ...
- POJ-3208 Apocalypse Someday (数位DP)
只要某数字的十进制表示中有三个6相邻,则该数字为魔鬼数,求第X小的魔鬼数\(X\le 5e7\) 这一类题目可以先用DP进行预处理,再基于拼凑思想,用"试填法"求出最终的答案 \( ...
- POJ3208 Apocalypse Someday
题意 Language:Default Apocalypse Someday Time Limit: 1000MS Memory Limit: 131072K Total Submissions: 2 ...
- UPC 2223: A-Number and B-Number(数位DP+二分)
积累点: 1: (l&r)+((l^r)>>) == (l+r)/2 2: 注意判断现在是否有限制.当枚举下一个量时,是(isQuery && j==end),不要 ...
- hihocoder #1301 : 筑地市场 数位dp+二分
题目链接: http://hihocoder.com/problemset/problem/1301?sid=804672 题解: 二分答案,每次判断用数位dp做. #include<iostr ...
- 数位dp(求1-n中数字1出现的个数)
题意:求1-n的n个数字中1出现的个数. 解法:数位dp,dp[pre][now][equa] 记录着第pre位为now,equa表示前边是否有降数字(即后边可不能够任意取,true为没降,true为 ...
- CodeChef FAVNUM FavouriteNumbers(AC自动机+数位dp+二分答案)
All submissions for this problem are available. Chef likes numbers and number theory, we all know th ...
随机推荐
- 推荐系统之 BPR 算法及 Librec的BPR算法实现【1】
[推荐系统之 BPR 算法] 1.关于BPR的论文原文: BPR: Bayesian Personalized Ranking from Implicit Feedback 2.参考1:论文快读 - ...
- Android-----完全隐藏软键盘
隐藏软键盘一直是我头痛的事情,没有找到一种真正能隐藏的方法.点击EditText的时候总是弹出软键盘.-----杯具 杯具(一): InputMethodManager im =(InputMetho ...
- Android之SurfaceView使用总结
1.概念SurfaceView是View类的子类,可以直接从内存或者DMA等硬件接口取得图像数据,是个非常重要的绘图视图.它的特性是:可以在主线程之外的线程中向屏幕绘图上.这样可以避免画图任务繁重的时 ...
- 利用腾讯云免费证书打造全https站
什么是https? 超文本传输安全协议(Hypertext Transfer Protocol Secure,缩写为HTTPS)是一种网络安全传输协议http是HTTP协议运行在TCP之上,所有传输的 ...
- spring 4.0下集成webservice
该教程使用的项目可参见: Intellij Idea下搭建基于Spring+SpringMvc+MyBatis的WebApi接口架构 具体源码请参见GitHub: https://github.com ...
- web.csproj Compile 下出现两个同名 xxx.cs 项目中出现两个xxx.cs
删掉一个就好了 ItemGroup Compile 为加载的cs代码文件
- XtraTreeList直接显示Access数据库表中的数据
方法1:点击在拖入的显示控件(TreeList)右上方的箭头,在Treelist任务中选择数据源,添加项目数据源,依次选择数据库.数据集,新建连接,浏览选择数据库(*.mdb),依次点击 下一步,选择 ...
- ADF_ADF Framework基本概念(概念)
2014-01-01 Created By BaoXinjian
- Android Scrollview嵌套RecyclerView导致滑动卡顿问题解决
一个比较长的界面一般都是Scrollview嵌套RecyclerView来解决.不过这样的UI并不是我们开发人员想看到的,实际上嵌套之后.因为Scrollview和RecyclerView都是滑动控件 ...
- 使用Xcode 查看objective-C的汇编代码
Xcode自带将某一个源文件转化成汇编的功能.如图: 汇编的部分代码例如以下: # Assembly output for assemble.c # Generated at 2:29:34 下午 o ...