【数位dp】【二分】Gym - 101411H - Hotel in Ves Lagos
数位dp预处理之后,可以容易得到f(x),代表小于等于x的数中,有多少个不含13的。然后就能二分答案啦。
#include<cstdio>
#include<iostream>
using namespace std;
typedef unsigned long long ull;
ull n;
ull f[19][3];
void init()
{
f[0][0]=1;
for(int i=1;i<=18;++i)
{
f[i][0]=f[i-1][0]*10-f[i-1][1];
f[i][1]=f[i-1][0];
f[i][2]=f[i-1][2]*10+f[i-1][1];
}
}
ull work(ull x)
{
ull ans=0,t=x,bit[25],len=0;
while(t)
{
bit[++len]=t%10;
t/=10;
}
ull is=1;
for(int i=len;i>1;--i){
if(bit[i]==1 && bit[i-1]==3){
is=0;
break;
}
}
bit[len+1]=bit[len+2]=0;
bool flag=0;
for(int i=len;i;--i)
{
if(bit[i+1]==3 && bit[i+2]==1)
flag=1;
ans+=f[i-1][2]*bit[i];
if(flag)
ans+=bit[i]*f[i-1][0];
else
{
if(bit[i] > 1)
ans+=f[i-1][1];
if(bit[i+1] == 1 && bit[i] > 3)
ans+=f[i][1];
}
}
return x-ans+is-1;
}
int T;
int main()
{
init();
freopen("hotel.in","r",stdin);
freopen("hotel.out","w",stdout);
scanf("%d",&T);
// work(14);
for(;T;--T)
{
cin>>n;
ull l=1,r=(ull)2000000000000000000ll;
while(l<r){
ull mid=(l+r)/(ull)2;
if(work(mid)>=n){
r=mid;
}
else{
l=mid+1;
}
}
cout<<l<<endl;
}
return 0;
}
【数位dp】【二分】Gym - 101411H - Hotel in Ves Lagos的更多相关文章
- 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的数. ...
- Problem H. Hotel in Ves Lagos
Problem H. Hotel in Ves Lagos Input le: hotel.in Output le: hotel.out Time limit: 1 second Memory li ...
- hihocoder #1301 : 筑地市场 数位dp+二分
题目链接: http://hihocoder.com/problemset/problem/1301?sid=804672 题解: 二分答案,每次判断用数位dp做. #include<iostr ...
- UPC 2223: A-Number and B-Number(数位DP+二分)
积累点: 1: (l&r)+((l^r)>>) == (l+r)/2 2: 注意判断现在是否有限制.当枚举下一个量时,是(isQuery && j==end),不要 ...
- CodeChef FAVNUM FavouriteNumbers(AC自动机+数位dp+二分答案)
All submissions for this problem are available. Chef likes numbers and number theory, we all know th ...
- hdu 3271 SNIBB 数位DP+二分
思路:dp[i][j]:表示第i位在B进制下数字和. 用二分找第k个数! 代码如下: #include<iostream> #include<stdio.h> #include ...
- [uva 1350]数位dp+二分
题目链接:https://vjudge.net/problem/38405 #include<bits/stdc++.h> using namespace std; ][]; ]; lon ...
- HDU 3271 数位dp+二分
SNIBB Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others)Total Submi ...
- HDU 3943 数位dp+二分
K-th Nya Number Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 125536/65536 K (Java/Others) ...
随机推荐
- 微信小程序提示框
一.wx.showToast 如上图所示,showToast会显示一个弹窗,在指定的时间之后消失.中间的图标默认只有加载中和成功两种,也可以用image参数自定义图标 wx.showToast({ t ...
- appcan UI
appcan UI 公共类 ([appcanUI框架地址:](http://newdocx.appcan.cn/UI/source) .ub { display: -webkit-box !impor ...
- HDU 2899 三分
我们对这个函数求二阶导数,发现他的二阶导数是恒大于0的,那么他的导数是单调的,且在某时刻为0,那么这时的x值就是极值处的x值,其实题目说了,有最小值,那么我们三分水过去就好了. 反思:精度不够,因为是 ...
- C# SuperSocket 消息推送
服务端使用Nuget引用SuperSocket.WebSocket和SuperSocket.Engine 服务器端代码[控制台] using SuperSocket.WebSocket; using ...
- Spring Cloud与Spring Boot的关系
1.Spring Cloud是一个工具集:Spring Cloud是在Spring Boot的基础上构建的,用于简化分布式系统构建的工具集:使架构师在创建和发布微服务时极为便捷和有效. Sp ...
- Linux命令--hostname和uname
hostname命令 hostname命令用于显示和设置系统的主机名称.环境变量HOSTNAME也保存了当前的主机名.在使用hostname命令设置主机名后,系统并不会永久保存新的主机名,重新启动机器 ...
- ue4.3正式版源码链接
ue4.3正式版源码链接 http://tieba.baidu.com/p/3170253742
- selenium WebElement 的属性和方法 属性
tag_name 标签名,例如 'a'表示<a>元素get_attribute(name) 该元素name 属性的值text 该元素内的文本,例如<span>hello< ...
- 【bzoj4896】补退选
傻逼题. 每个点维护下vector,然后随便做. #include<bits/stdc++.h> ; using namespace std; typedef long long ll; ...
- LinkedList 源码分析
LinkedList :双向链表结构, 内部存在frist节点 和 last节点.通过改变 首节点和 尾节点的引用来实现新增和修改 有一个内部类: //节点类,内部包括前节点和后节点,和数据项 // ...