【题解】P4124 [CQOI2016]手机号码
\(Desciption:\)
给出区间 \([L,R]\) ,求区间内满足没有 \(4\) 和 \(8\) 同事出现并且一定要有三位连续的相同。
并且一定是十一位的电话号码。
\(Sample\) \(Input:\)
12121284000 12121285550
\(Sample\) \(Output:\)
5
\(Solution:\)
考虑数位dp,一眼就是啊。。。
不然数据范围不会这么大。。。
那么传入好多个参数:
位数(\(len\)),是否有 \(4\) (\(if4\)), 是否有 \(8\) (\(if8\)),是否有连续的三个数(\(ifc\)),上一个的上一个是啥子(\(prepre\)),上一个是啥子(\(pre\)),取得上限(\(limit\))。
代码就非常显然了,但要注意如果 \(l==1e10\) 那么不能直接算 \(l-1\) 的合法个数,只能减去 \(0\)。
个人认为这题除了传入参数要大胆,其他也没啥子了。。。
#include<bits/stdc++.h>
#define int long long
using namespace std;
int l,r,cnt;
const int N=12;
int f[N][2][2][2][N][N],digit[N];
inline int dfs(int len,bool if4,bool if8,bool ifc,int prepre,int pre,bool limit){if(if4 && if8) return 0;if(len==0){if(ifc) return 1;return 0;}if(!limit && f[len][if4][if8][ifc][prepre][pre]!=-1) return f[len][if4][if8][ifc][prepre][pre];int ret=0,up_bound=(limit)?digit[len]:9;for(int i=(len==cnt);i<=up_bound;++i){ret+=dfs(len-1,if4||(i==4),if8||(i==8),ifc||((i==prepre) && (i==pre)),pre,i,limit&&(i==up_bound)); }return f[len][if4][if8][ifc][prepre][pre]=ret;
}
inline int solve(int x){if(x<(int)1e10) return 0;cnt=0;memset(f,-1,sizeof(f));while(x) digit[++cnt]=x%10,x/=10;return dfs(cnt,false,false,false,-10,-10,true);
}
signed main(){scanf("%lld%lld",&l,&r);printf("%lld\n",solve(r)-solve(l-1));return 0;
}
转载于:https://www.cnblogs.com/JCNL666/p/10717490.html
【题解】P4124 [CQOI2016]手机号码相关推荐
- P4124 [CQOI2016]手机号码
链接:https://www.luogu.org/problemnew/show/P4124 题目描述 人们选择手机号码时都希望号码好记.吉利.比如号码中含有几位相邻的相同数字.不含谐音不吉利的数字等 ...
- 洛谷P4124 [CQOI2016]手机号码
凭感觉,要计算区间 [ L , R ] [L,R] [L,R]这些而且数目很大的,对数字位数有限制的,我们会考虑数位dp的模型 考虑状态 d p ( c u r , t o p , p r e 1 , ...
- [CQOI2016]手机号码 数位DP
[CQOI2016]手机号码 用来数位DP入门,数位DP把当前是否需要限制取数范围(是否正在贴着临界值跑,即下面的limited)和一切需要满足的条件全部塞进记忆化搜索参数里面就好了,具体情况转移便好 ...
- 【洛谷P4124】[CQOI2016]手机号码
手机号码 数位DP模板题 记忆化搜索: #include<iostream> #include<cstring> #include<cstdio> using na ...
- [SOCI2005]最大子矩阵(DP) + [JXOI2018]守卫(DP) + [CQOI2016]手机号码(数位DP)[各种DP专练]
DP专练博客 DP专练 T1:最大子矩阵 题目 题解 代码实现 T2:守卫 题目 题解 代码实现 T3:手机号码 题目 题解 代码实现 T1:最大子矩阵 题目 这里有一个n*m的矩阵,请你选出其中k个 ...
- [BZOJ4521][Cqoi2016]手机号码 (数位dp)
题目描述 人们选择手机号码时都希望号码好记.吉利.比如号码中含有几位相邻的相同数字.不含谐音不吉利的数字等.手机运营商在发行新号码时也会考虑这些因素,从号段中选取含有某些特征的号码单独出售.为了便于前 ...
- BZOJ4521: [Cqoi2016]手机号码
Description 人们选择手机号码时都希望号码好记.吉利.比如号码中含有几位相邻的相同数字.不含谐音不 吉利的数字等.手机运营商在发行新号码时也会考虑这些因素,从号段中选取含有某些特征的号 码单 ...
- Bzoj4521 [Cqoi2016]手机号码
Time Limit: 10 Sec Memory Limit: 512 MB Submit: 557 Solved: 335 Description 人们选择手机号码时都希望号码好记.吉利.比如 ...
- [CQOI2016]手机号码
嘟嘟嘟 这题一看就是数位dp. 我写数位dp,一般是按数位dp的格式写一个爆搜,然后加一点记忆化. 不过其实我一直不是很清楚记忆化是怎么加,感觉就是把dfs里的参数都扔到dp数组里,好像很暴力啊. 这 ...
最新文章
- 【linux命令】setterm控制终端属性命令(中英文)
- 你需要知道的20个常用的Python技巧
- R语言ggplot2可视化:使用热力图可视化dataframe数据、自定义设置热力图的颜色、自定添加标题、轴标签、热力图线框等
- 使用 flex 实现 5 种常用布局
- 服务器巡检文档,服务器巡检工具
- 中石油训练赛 - Equidistant(bfs)
- SQL PASS北京用户群成功举办第一次线下活动,性能调优PPT分享
- 2014——我们都任性过
- 基于openstack的自动化测试平台设计头脑风暴
- 【国产】TASKCTL批量作业调度统一图形监控运维平台
- java编程规范换行_Java源代码的换行规则
- 【HTTP Live Streaming】(四)苹果公司提供的7款 hls 工具
- 下载阿里云OSS上的文件及文件夹
- 20 | 幻读是什么,幻读有什么问题?
- 在VMware中安装红帽Linux系统
- ListView接收另一个页面的数值显示
- 华硕笔记本没有无线服务器,华硕电脑搜不到wifi怎么回事
- win7你没有权限查看或编辑这个对象的权限设置
- 孙宏斌频变“脸谱” 乐视网该何去何从?
- java ci框架_CI(CodeIgniter)框架介绍
热门文章
- Tomcat - 都说Tomcat违背了双亲委派机制,到底对不对?
- WebView完全解读
- android:descendantFocusability
- 在计算机上工作用英语怎么说,“Go to work”是“去上班”,那“上夜班”用英语怎么说呢?...
- python 有效的字母异位词
- 小米6 android os,脱离安卓!小米6刷入全新系统:界面炫酷,可流畅日常使用!...
- java string转bytebuf,如何将Java字符串转换为字节[]?
- python字符计数怎样去除空格_去除python中的字符串空格的简单方法
- 安卓屏幕适配方案(根据今日头条方案,升级版)
- wordpress外部调用到html_Spring 自调用事务失效,你是怎么解决的?