洛谷P4124 手机号码
这题也就是条件限制多了点,也没有别的,套板子就好了
注意这里没有前导零,所以第一位是从1开始填
看注释叭
#include<iostream>
#include<cstdio>
#include<cmath>
#include<algorithm>
#include<queue>
#include<cstring>
using namespace std;
typedef unsigned long long ull;
typedef long long ll;
const int inf=214748364;
const ll mod=1000000007;
inline ll read()
{
char ch=getchar();
ll x=0;bool f=0;
while(ch<'0'||ch>'9')
{
if(ch=='-')f=1;
ch=getchar();
}
while(ch>='0'&&ch<='9')
{
x=(x<<1)+(x<<3)+(ch^48);
ch=getchar();
}
return f?-x:x;
}
ll l,r;
ll g[20][10][2][2][2][20],li[20];
int t;
void make(ll k)
{
t=0;
memset(g,-1,sizeof(g));
while(k)
{
li[++t]=k%10;
k/=10;
}
}
ll dfs(int now,int lst,bool g8,bool g4,bool lim,bool maxc,int nc)
/*
当前填到了第几位
上一位填的啥
有没有8
有没有4
是否顶上界
有没有至少连续3个相同的数
上一位和它前面的位形成了几个连续的相同的数(nowcnt)
*/
{
if(!now) return maxc;
if(!lim&&g[now][lst][g8][g4][maxc][nc]!=-1) return g[now][lst][g8][g4][maxc][nc];
int up=lim?li[now]:9;
ll rtn=0;
for(int i=(now==t);i<=up;i++)
{
int mma=nc;
if(g8&&i==4)continue;//有8没4
if(g4&&i==8)continue;//有4没8
if(i==lst)
{
mma++;
if(nc==0)mma++;//因为一旦出现这一位与上一位相同,且上一位和上上位不相同,则产生连续两位相同的数
}
else mma=0;//如果与上一位不同,则说明连续的位断开,要传下去的nc变为0
rtn+=dfs(now-1,i,g8||(i==8),g4||(i==4),lim&&(i==up),(mma>=3)||maxc,mma);
}
if(!lim) g[now][lst][g8][g4][maxc][nc]=rtn;
return rtn;
}
int main()
{
ll ans=0;
l=read();
r=read();
make(r);
ans=dfs(t,0,0,0,1,0,0);
if(l>10000000000)//因为当l==1e10时,l-1=1e10-1,也就是说只有10位,然而dfs里面没有判位数,所以要对l=1e10进行特判(懒得在dfs里面加特判了ρωρ)
{
make(l-1);
ans-=dfs(t,0,0,0,1,0,0);
}
printf("%lld",ans);
}
洛谷P4124 手机号码的更多相关文章
- 洛谷 P4124 (数位 DP)
### 洛谷 P4124 题目链接 ### 题目大意: 给你一段区间,让你求满足下列两个条件时的数的个数. 1.至少有 3 个相邻相同数字 (即 111 .1111 .222 等) 2.不能同时出现 ...
- 【洛谷P4124】[CQOI2016]手机号码
手机号码 数位DP模板题 记忆化搜索: #include<iostream> #include<cstring> #include<cstdio> using na ...
- [洛谷P4124][CQOI2016]手机号码
题目大意:给你两个$l,r$,求出$[l,r]$中符合要求的数,要求为至少有$3$个相邻的相同数字,且不可以同时出现$8$和$4$ 题解:数位$DP$ 卡点:无 C++ Code: #include ...
- 洛谷 P4124 [CQOI2016]手机号码
题意简述 求l~r之间不含前导零,至少有三个相邻的相同数字,不同时含有4和8的11位正整数的个数 题解思路 数位DP,注意在l,r位数不够时补至11位 代码 #include <cstdio&g ...
- 洛谷1640 bzoj1854游戏 匈牙利就是又短又快
bzoj炸了,靠离线版题目做了两道(过过样例什么的还是轻松的)但是交不了,正巧洛谷有个"大牛分站",就转回洛谷做题了 水题先行,一道傻逼匈牙利 其实本来的思路是搜索然后发现写出来类 ...
- 洛谷P1352 codevs1380 没有上司的舞会——S.B.S.
没有上司的舞会 时间限制: 1 s 空间限制: 128000 KB 题目等级 : 钻石 Diamond 题目描述 Description Ural大学有N个职员,编号为1~N.他们有 ...
- 洛谷P1108 低价购买[DP | LIS方案数]
题目描述 “低价购买”这条建议是在奶牛股票市场取得成功的一半规则.要想被认为是伟大的投资者,你必须遵循以下的问题建议:“低价购买:再低价购买”.每次你购买一支股票,你必须用低于你上次购买它的价格购买它 ...
- 洛谷 P2701 [USACO5.3]巨大的牛棚Big Barn Label:二维数组前缀和 你够了 这次我用DP
题目背景 (USACO 5.3.4) 题目描述 农夫约翰想要在他的正方形农场上建造一座正方形大牛棚.他讨厌在他的农场中砍树,想找一个能够让他在空旷无树的地方修建牛棚的地方.我们假定,他的农场划分成 N ...
- 洛谷P1710 地铁涨价
P1710 地铁涨价 51通过 339提交 题目提供者洛谷OnlineJudge 标签O2优化云端评测2 难度提高+/省选- 提交 讨论 题解 最新讨论 求教:为什么只有40分 数组大小一定要开够 ...
随机推荐
- json.dumps、json.dump、json.loads、json.load的区别
json 模块提供了一种很简单的方式来编码和解码JSON数据. 其中两个主要的函数是 json.dumps() 和 json.loads() 下面是如何将Python数据结构转换为json impor ...
- 毛玻璃效果 css
毛玻璃效果 <style> .container{ width: 287px; height: 285px; background-image: url(img/background.pn ...
- Python 通过dmidecode获取Linux服务器硬件信息
通过 dmidecode 命令可以获取到 Linux 系统的包括 BIOS. CPU.内存等系统的硬件信息,这里使用 python 代码来通过调用 dmidecode 命令来获取 Linux 必要的系 ...
- .net Core——SqlSugar使用
一.DbContext配置 public class DbContext { public DbContext() { Db = new SqlSugarClient(new ConnectionCo ...
- Docker 内pip安装package报错: Failed to establish a new connection: [Errno -3] Temporary failure in name resolution'
说来奇幻(对本菜来说, 经常遇到堪称奇幻的问题) 之前在docker里面各种安装都没问题, 也不知道什么引起的, 昨天晚上调试的时候卸载了一个包的版本,然后就安不上了. 宿主机安装依然各种流畅,唯独d ...
- SpringBoot集成redis + spring cache
Spring Cache集成redis的运行原理: Spring缓存抽象模块通过CacheManager来创建.管理实际缓存组件,当SpringBoot应用程序引入spring-boot-starte ...
- linux find 用法和常见用例
Linux中find常见用法示例 ·find path -option [ -print ] [ -exec -ok command ] {} \; 本人qq群也有许多 ...
- POJ2942 UVA1364 Knights of the Round Table 圆桌骑士
POJ2942 洛谷UVA1364(博主没有翻墙uva实在是太慢了) 以骑士为结点建立无向图,两个骑士间存在边表示两个骑士可以相邻(用邻接矩阵存图,初始化全为1,读入一对憎恨关系就删去一条边即可),则 ...
- [UVa1057] Routing
问题描述 As more and more transactions between companies and people are being carried out electronically ...
- nyoj 952 : 最大四边形 (计算几何)
题目链接 任意四边形均可看作是两个三角形拼接得到的(即使是凹四边形),故 可以O(n^2)枚举所有的线段,然后对每条线段O(n)枚举线段端点外的其他点,用来更新以此线段构成的三角形的有向面积的最大值m ...