【POJ3208】Apocalypse Someday
Description
666号被认为是神秘的“野兽之数”,在所有以启示录为主题的大片中都是一个被广泛使用的数字。但是,这个数字666不能总是在脚本中使用,所以应该使用1666这样的数字。让我们把至少包含三个连续的六位数字的数字称为可怕的数字。头几个可怕的数字是666,1666,2666,3666,4666,5666…
给定一个基于1的索引n,程序应该返回第n个可怕的数字。
Input
第一行包含测试用例的数量t(t≤1000)。
以下每一个t行包含一个整数n(1≤n≤50000000)作为测试用例。
Output
对于每个测试用例,您的程序应该输出第n个糟糕的数字。
Sample Input
3
2
3
187
Sample Output
1666
2666
66666
这题的\(T\)比较小,我们考虑二分第\(n\)个可怕的数。
数位DP求出这个数字之前有几个可怕的数。
#include<bits/stdc++.h>
using namespace std;
int dp[101][2][2][2],n,x,a[101],cnt,t;
int get_ans(int wei,int st,int nd,int six,int ding)
{
if(!wei)
{
return six;
}
if(!ding&&dp[wei][st][nd][six])
{
return dp[wei][st][nd][six];
}
int up=ding?a[wei]:9,ans=0;
for(int i=0;i<=up;i++)
{
if(six)
{
ans+=get_ans(wei-1,i==6,st,1,ding&&(i==up));
}else{
ans+=get_ans(wei-1,i==6,st,st&&nd&&i==6,ding&&(i==up));
}
}
if(!ding)
{
dp[wei][st][nd][six]=ans;
}
return ans;
}
int check(long long x)
{
cnt=0;
while(x)
{
a[++cnt]=x%10;
x/=10;
}
return get_ans(cnt,0,0,0,1);
}
int main()
{
scanf("%d",&t);
while(t--)
{
scanf("%d",&x);
long long l=1,r=100000000000;
while(l<=r)
{
long long mid=(l+r)/2;
if(check(mid)<x)
{
l=mid+1;
}else{
r=mid-1;
}
}
printf("%lld\n",l);
}
return 0;
}
【POJ3208】Apocalypse Someday的更多相关文章
- 【POJ3208】 (DP)
Apocalypse Someday Description The number 666 is considered to be the occult “number of the beast” a ...
- POJ3208:Apocalypse Someday
传送门 很神奇的一道题,正解是AC自动机+数位DP,个人感觉POPOQQQ大爷的方法更方便理解. 按照一般套路,先搞个DP预处理,设$f[i][0/1/2/3]$分别表示对于$i$位数,其中有多少个前 ...
- 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的数. ...
- POJ3208 Apocalypse Someday
题意 Language:Default Apocalypse Someday Time Limit: 1000MS Memory Limit: 131072K Total Submissions: 2 ...
- 【原】FMDB源码阅读(二)
[原]FMDB源码阅读(二) 本文转载请注明出处 -- polobymulberry-博客园 1. 前言 上一篇只是简单地过了一下FMDB一个简单例子的基本流程,并没有涉及到FMDB的所有方方面面,比 ...
- 【POJ2482】【线段树】Stars in Your Window
Description Fleeting time does not blur my memory of you. Can it really be 4 years since I first saw ...
- 【原创】shadowebdict开发日记:基于linux的简明英汉字典(三)
全系列目录: [原创]shadowebdict开发日记:基于linux的简明英汉字典(一) [原创]shadowebdict开发日记:基于linux的简明英汉字典(二) [原创]shadowebdic ...
- Python高手之路【六】python基础之字符串格式化
Python的字符串格式化有两种方式: 百分号方式.format方式 百分号的方式相对来说比较老,而format方式则是比较先进的方式,企图替换古老的方式,目前两者并存.[PEP-3101] This ...
- 【原】谈谈对Objective-C中代理模式的误解
[原]谈谈对Objective-C中代理模式的误解 本文转载请注明出处 —— polobymulberry-博客园 1. 前言 这篇文章主要是对代理模式和委托模式进行了对比,个人认为Objective ...
随机推荐
- 【集群监控】Docker上部署Prometheus+Alertmanager+Grafana实现集群监控
Docker部署 下载 sudo yum-config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.re ...
- JDK 1.8 之 Map.merge()
Map 中ConcurrentHashMap是线程安全的,但不是所有操作都是,例如get()之后再put()就不是了,这时使用merge()确保没有更新会丢失. 因为Map.merge()意味着我们可 ...
- springcloud --- spring cloud sleuth和zipkin日志管理(spring boot 2.18)
前言 在spring cloud分布式架构中,系统被拆分成了许多个服务单元,业务复杂性提高.如果出现了异常情况,很难定位到错误位置,所以需要实现分布式链路追踪,跟进一个请求有哪些服务参与,参与的顺序如 ...
- Chrome 和 Chromedriver 的安装和配置
1.Chrome 下载安装地址:https://www.google.com/intl/zh-CN_ALL/chrome/ 2.Chromedriver的安装 方法一: (1) brew cask i ...
- windows 7 专业版 64位 无法安装.Net 4.7版本解决方案
什么暂停windows update,改文件夹,再恢复windows update等等方法都试了,不行之后就觉得这才是终极解决方案. 不管你是win 7什么版本,你只需要下载安装对应系统的Window ...
- PHP array_unshift
1.函数的作用:在数组的开头插入一个或者多个元素 2.函数的参数: @params array &$array @params mixed $value1 @params mixed ...
- [Luogu1291][SHOI2002]百事世界杯之旅
题目描述 “……在2002年6月之前购买的百事任何饮料的瓶盖上都会有一个百事球星的名字.只要凑齐所有百事球星的名字,就可参加百事世界杯之旅的抽奖活动,获得球星背包,随声听,更克赴日韩观看世界杯.还不赶 ...
- Android WebSocket实现即时通讯功能
最近做这个功能,分享一下.即时通讯(Instant Messaging)最重要的毫无疑问就是即时,不能有明显的延迟,要实现IM的功能其实并不难,目前有很多第三方,比如极光的JMessage,都比较容易 ...
- MySQL的远程连接问题 错误1130
解决办法:将localhost改成%. 在远程主机上--> 登陆mysql服务执行如下代码: mysql -u root -p mysql>use mysql; mysql>upda ...
- epoll--IO多路复用
理解 epoll 过程 #include <stdio.h> #include <stdlib.h> #include <string.h> #include &l ...