链接:https://www.luogu.org/problemnew/show/P4124

题目描述

人们选择手机号码时都希望号码好记、吉利。比如号码中含有几位相邻的相同数字、不含谐音不吉利的数字等。手机运营商在发行新号码时也会考虑这些因素,从号段中选取含有某些特征的号码单独出售。为了便于前期规划,运营商希望开发一个工具来自动统计号段中满足特征的号码数量。

工具需要检测的号码特征有两个:号码中要出现至少 33 个相邻的相同数字;号码中不能同时出现 88 和 44 。号码必须同时包含两个特征才满足条件。满足条件的号码例如:13000988721、23333333333、14444101000。而不满足条件的号码例如:1015400080、10010012022。

手机号码一定是 11 位数,前不含前导的 00 。工具接收两个数 LL 和 RR ,自动统计出 [L,R][L,R] 区间内所有满足条件的号码数量。 LL 和 RR 也是 1111 位的手机号码。

输入输出格式

输入格式:

输入文件内容只有一行,为空格分隔的 22 个正整数 L,RL,R 。

输出格式:

输出文件内容只有一行,为 11 个整数,表示满足条件的手机号数量。

输入输出样例

输入样例#1: 复制

12121284000 12121285550

输出样例#1: 复制

5

说明

样例解释:满足条件的号码: 12121285000、 12121285111、 12121285222、 12121285333、 12121285550。

数据范围: 10^10≤L≤R<10^11 。

题解:数位dp, 还是挺容易yy出来的,但要去掉前导0的情况,<10^10是不合法的

// luogu-judger-enable-o2
#include<bits/stdc++.h>
using namespace std;
#define ll long long
#define rt register
const int M = 2530;
ll dp[20][10][2][2][2][2];
int digit[20], cnt, tot, bg[M];ll dfs(int dep, bool f, bool two, bool ok, int t, bool a4, bool a8){if(!dep) return (( !(a4 & a8) ) & ok);if(!f && dp[dep][t][two][ok][a4][a8] != -1) return dp[dep][t][two][ok][a4][a8];rt int i = f ? digit[dep] : 9;ll tmp = 0;for(; i >= 0; i--){if(dep==tot&&i==0) continue;bool ntwo, nok = ok;if(two && (t == i)) ntwo = 0, nok = 1;else if(i == t) ntwo = 1;else ntwo = 0;tmp += dfs(dep - 1, f & (i == digit[dep]), ntwo, nok, i, a4 | (i == 4), a8 | (i == 8));}if(!f)dp[dep][t][two][ok][a4][a8] = tmp;return tmp;
}ll get(ll a){memset(dp, -1, sizeof(dp));    tot = 0;    while(a){digit[++tot] = a%10;a /= 10;}if(tot<11) return 0;ll ans = dfs(tot, 1, 0, 0, 0, 0, 0);return ans;
}
ll read(){ll x = 0; ll f = 1; char c = getchar();while(c<'0'||c>'9'){if(c=='-')f=-1;c=getchar();}while(c<='9'&&c>='0'){x=x*10+c-'0';c=getchar();}return x*f;
}int main(){///freopen("1.in","r",stdin);//freopen("my.out","w",stdout);int T;memset(dp, -1, sizeof(dp));ll L = read(), R = read();ll ans2 = get(L - 1);ll ans1 = get(R);//cout<<ans1<<" "<<ans2;cout<<ans1-ans2<<endl;
}
//10000000000 10000012345

View Code

转载于:https://www.cnblogs.com/EdSheeran/p/9483273.html

P4124 [CQOI2016]手机号码相关推荐

  1. 【题解】P4124 [CQOI2016]手机号码

    \(Desciption:\) 给出区间 \([L,R]\) ,求区间内满足没有 \(4\) 和 \(8\) 同事出现并且一定要有三位连续的相同. 并且一定是十一位的电话号码. \(Sample\) ...

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

    凭感觉,要计算区间 [ L , R ] [L,R] [L,R]这些而且数目很大的,对数字位数有限制的,我们会考虑数位dp的模型 考虑状态 d p ( c u r , t o p , p r e 1 , ...

  3. [CQOI2016]手机号码 数位DP

    [CQOI2016]手机号码 用来数位DP入门,数位DP把当前是否需要限制取数范围(是否正在贴着临界值跑,即下面的limited)和一切需要满足的条件全部塞进记忆化搜索参数里面就好了,具体情况转移便好 ...

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

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

  5. [SOCI2005]最大子矩阵(DP) + [JXOI2018]守卫(DP) + [CQOI2016]手机号码(数位DP)[各种DP专练]

    DP专练博客 DP专练 T1:最大子矩阵 题目 题解 代码实现 T2:守卫 题目 题解 代码实现 T3:手机号码 题目 题解 代码实现 T1:最大子矩阵 题目 这里有一个n*m的矩阵,请你选出其中k个 ...

  6. [BZOJ4521][Cqoi2016]手机号码 (数位dp)

    题目描述 人们选择手机号码时都希望号码好记.吉利.比如号码中含有几位相邻的相同数字.不含谐音不吉利的数字等.手机运营商在发行新号码时也会考虑这些因素,从号段中选取含有某些特征的号码单独出售.为了便于前 ...

  7. Bzoj4521 [Cqoi2016]手机号码

    Time Limit: 10 Sec  Memory Limit: 512 MB Submit: 557  Solved: 335 Description 人们选择手机号码时都希望号码好记.吉利.比如 ...

  8. BZOJ4521: [Cqoi2016]手机号码

    Description 人们选择手机号码时都希望号码好记.吉利.比如号码中含有几位相邻的相同数字.不含谐音不 吉利的数字等.手机运营商在发行新号码时也会考虑这些因素,从号段中选取含有某些特征的号 码单 ...

  9. [CQOI2016]手机号码

    嘟嘟嘟 这题一看就是数位dp. 我写数位dp,一般是按数位dp的格式写一个爆搜,然后加一点记忆化. 不过其实我一直不是很清楚记忆化是怎么加,感觉就是把dfs里的参数都扔到dp数组里,好像很暴力啊. 这 ...

最新文章

  1. page_index--template.html(0)源码
  2. Memcache缓存系统原理
  3. linux 下opencv安装教程,linux 下 opencv安装
  4. 2018黄河奖设计大赛获奖_宣布我们的freeCodeCamp 2018杰出贡献者奖获奖者
  5. SpringBoot2.0 基础案例(16):配置Actuator组件,实现系统监控
  6. Kubernetes—常用命令总结(二)
  7. PyTorch 1.0 中文文档:torch.nn.functional
  8. KubeCon 2018 参会记录 —— FluentBit Deep Dive 1
  9. Android复习准备
  10. uniapp 小程序授权登录时 获取不到用户头像等信息 只能得到灰色缺省头像以及nickname 为“微信用户”等
  11. win8.1删除桌面的IE图标
  12. 无线测温传感器、无线测温装置在项目上的应用—安科瑞 孙斌
  13. 非对称算法之RSA的签名剖析
  14. linux下code-server离线远程web浏览器调试C++代码
  15. nodejs绿色版下载安装及配置淘宝镜像、安装vue脚手架
  16. 锐利特科技物联网云平台解决方案
  17. VASP学习笔记--简单的VASP运行实例:CrI3做非磁的优化
  18. Law of continuity
  19. ASP.Net免费发送短信
  20. python 图片文字识别orc

热门文章

  1. 三星s轻奢android+p,三星Galaxy S轻奢版5月21日将至:骁龙660处理器+安卓8.0
  2. 怎么用php操作mysql删除数据库代码_如何使用php操作mysql的增删改查?
  3. 计算机用户停用无法登录,电脑开机无法登录提示您的账户已被停用如何解决。 如何解决电脑开机无法登录提示您的账户已被停用的问题。...
  4. PHP的addslashes 函数详解
  5. docker客户端连接远程服务器
  6. Tensorflow【实战Google深度学习框架】使用 HDF5 处理大型数据集with TFLearn
  7. 【Network Security!】密码攻击的原理和方法
  8. 机器学习(MACHINE LEARNING) 【周志华版-”西瓜书“-笔记】 DAY10-降维和度量学习
  9. 2 resize 到指定大小_阿里巴巴为什么让初始化集合时必须指定大小?
  10. java 奖xls转成csv_java - 在Java中将.csv转换为.xls - 堆栈内存溢出