题意简述

求l~r之间不含前导零,至少有三个相邻的相同数字,不同时含有4和8的11位正整数的个数

题解思路

数位DP,注意在l,r位数不够时补至11位

代码

#include <cstdio>
#include <cstring>
typedef long long ll;
int cnt;
int num[20];
ll l, r;
ll dp[20][2][10][10][2][2];
bool _4, _8, _f;
ll dfs(int len, int p1, int p2, bool limit, bool lead, bool flag, bool f4, bool f8)
{
ll s = 0;
if (len < cnt && lead) return 0;
if (len == 0) return flag;
ll& dp = ::dp[len][flag][p1][p2][f4][f8];
if (!limit && ~dp) return dp;
int mx = limit ? num[len] : 9;
for (register int i = 0; i <= mx; ++i)
{
if ((i == 4 && f8) || (i == 8 && f4)) continue;
_4 = f4 || (i == 4); _8 = f8 || (i == 8);
_f = flag || (i == p1 && p1 == p2);
s += dfs(len - 1, i, p1, limit && (i == mx), lead && !i, _f, _4, _8);
}
if (!limit) dp = s;
return s;
}
ll solve(ll x)
{
cnt = 0;
memset(dp, -1, sizeof(dp));
while (x) {num[++cnt] = x % 10; x /= 10; }
while (cnt < 11) num[++cnt] = 0;
return dfs(cnt, -1, -1, 1, 1, 0, 0, 0);
}
int main()
{
scanf("%lld%lld", &l, &r);
printf("%lld", solve(r) - solve(l - 1));
}

洛谷 P4124 [CQOI2016]手机号码的更多相关文章

  1. [洛谷P4124][CQOI2016]手机号码

    题目大意:给你两个$l,r$,求出$[l,r]$中符合要求的数,要求为至少有$3$个相邻的相同数字,且不可以同时出现$8$和$4$ 题解:数位$DP$ 卡点:无 C++ Code: #include ...

  2. [Luogu P4124] [CQOI2016]手机号码 (数位DP)

    题面 传送门:洛咕 Solution 感谢神仙@lizbaka的教学 这题是数位DP的非常非常模板的题目,只是状态有点多 . 这题我使用记忆化搜索实现的 中国有句古话说的好,有多少个要求就设多少个状态 ...

  3. 洛谷 P4124 (数位 DP)

    ### 洛谷 P4124 题目链接 ### 题目大意: 给你一段区间,让你求满足下列两个条件时的数的个数. 1.至少有 3 个相邻相同数字 (即 111 .1111 .222 等) 2.不能同时出现 ...

  4. P4124 [CQOI2016]手机号码

    P4124 [CQOI2016]手机号码 题解 数位DP   DFS  虽然套路,但还是恶心到找不到锅在哪里 注意这个 然后你就发现其实这样就不用记录前导0了 锅在这个鬼地方QAQ 代码 #inclu ...

  5. 【洛谷P4124】[CQOI2016]手机号码

    手机号码 数位DP模板题 记忆化搜索: #include<iostream> #include<cstring> #include<cstdio> using na ...

  6. 洛谷P4124 手机号码

    传送 这题也就是条件限制多了点,也没有别的,套板子就好了 注意这里没有前导零,所以第一位是从1开始填 看注释叭 #include<iostream> #include<cstdio& ...

  7. 洛谷1640 bzoj1854游戏 匈牙利就是又短又快

    bzoj炸了,靠离线版题目做了两道(过过样例什么的还是轻松的)但是交不了,正巧洛谷有个"大牛分站",就转回洛谷做题了 水题先行,一道傻逼匈牙利 其实本来的思路是搜索然后发现写出来类 ...

  8. 洛谷P1352 codevs1380 没有上司的舞会——S.B.S.

    没有上司的舞会  时间限制: 1 s  空间限制: 128000 KB  题目等级 : 钻石 Diamond       题目描述 Description Ural大学有N个职员,编号为1~N.他们有 ...

  9. 洛谷P1108 低价购买[DP | LIS方案数]

    题目描述 “低价购买”这条建议是在奶牛股票市场取得成功的一半规则.要想被认为是伟大的投资者,你必须遵循以下的问题建议:“低价购买:再低价购买”.每次你购买一支股票,你必须用低于你上次购买它的价格购买它 ...

随机推荐

  1. Java连载5-标识符、关键字和字面值

    一.标识符 1.标识符定义:在java源程序中凡是可以自己命名的单词 2.标识符可以标识什么元素? (1)类名(2)方法名(3)变量名(4)接口名(5)常量名 等等 3.标识符的命名要求 (1)一个合 ...

  2. 探寻 webpack_bundle_analyzer 原理

    webpack_bundle_analyzer 是什么? 这是webpack官方出品的,对项目中模块依赖关系及体积的分析插件,其界面如下: 问题来了,这是如何来进行统计的? 这里提供一个插件的代码,可 ...

  3. vue组件间通信六种方式(完整版)

    本文总结了vue组件间通信的几种方式,如props. $emit/ $on.vuex. $parent / $children. $attrs/ $listeners和provide/inject,以 ...

  4. Lockey的沙雕低错集锦(未完待续~自己提升用)

      (嘿嘿 (^~ ^)) 1. bitset<2100>a[2100]    a[x]|=(1<<x)   (1<=x<=2100)  使用时忘了x的范围,额,应 ...

  5. MMM 状压dp学习记

    状压dp学习记 by scmmm 开始日期 2019/7/17 前言 状压dp感觉很好理解(本质接近于爆搜但是又有广搜的感觉),综合了dp的高效性(至少比dfs,bfs优),又能解决普通dp难搞定的问 ...

  6. python介绍、安装及相关语法、python运维、编译与解释

    1.python介绍 Python(英国发音:/ˈpaɪθən/ 美国发音:/ˈpaɪθɑːn/)是一种广泛使用的解释型.高级编程.通用型编程语言,由吉多.范罗苏姆创造,第一版发布于1991年.可以视 ...

  7. vim /home/yuanyc/.bashrc export LC_ALL=zh_CN.UTF-8

    vim /home/yuanyc/.bashrc export LC_ALL=zh_CN.UTF-8

  8. ASP.NET Core MVC 之视图(Views)

    ASP.NET Core MVC 控制器可以使用视图返回格式化的结果. 1.什么是视图 在 MVC 中,视图封装了用户与应用交互呈现细节.视图是具有生成要发送到客户端内容的,包含嵌入代码的HTML模板 ...

  9. apache自动打包日志脚本

    #!/bin/bash # apachedata=$(date +%Y%m%d) time=$(date +%Y%m%d%H --date='1 hour ago') cd /logs/apache/ ...

  10. 从0系统学Android-2.4隐式Intent

    本系列文章,参考<第一行代码>,作为个人笔记 更多内容:更多精品文章分类 使用隐式 Intent 相对于显示 Intent ,隐式 Intent 比较含蓄.这种方式不明确指出我们想要启动哪 ...