\(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]手机号码相关推荐

  1. P4124 [CQOI2016]手机号码

    链接:https://www.luogu.org/problemnew/show/P4124 题目描述 人们选择手机号码时都希望号码好记.吉利.比如号码中含有几位相邻的相同数字.不含谐音不吉利的数字等 ...

  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]手机号码

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

  8. Bzoj4521 [Cqoi2016]手机号码

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

  9. [CQOI2016]手机号码

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

最新文章

  1. 【linux命令】setterm控制终端属性命令(中英文)
  2. 你需要知道的20个常用的Python技巧
  3. R语言ggplot2可视化:使用热力图可视化dataframe数据、自定义设置热力图的颜色、自定添加标题、轴标签、热力图线框等
  4. 使用 flex 实现 5 种常用布局
  5. 服务器巡检文档,服务器巡检工具
  6. 中石油训练赛 - Equidistant(bfs)
  7. SQL PASS北京用户群成功举办第一次线下活动,性能调优PPT分享
  8. 2014——我们都任性过
  9. 基于openstack的自动化测试平台设计头脑风暴
  10. 【国产】TASKCTL批量作业调度统一图形监控运维平台
  11. java编程规范换行_Java源代码的换行规则
  12. 【HTTP Live Streaming】(四)苹果公司提供的7款 hls 工具
  13. 下载阿里云OSS上的文件及文件夹
  14. 20 | 幻读是什么,幻读有什么问题?
  15. 在VMware中安装红帽Linux系统
  16. ListView接收另一个页面的数值显示
  17. 华硕笔记本没有无线服务器,华硕电脑搜不到wifi怎么回事
  18. win7你没有权限查看或编辑这个对象的权限设置
  19. 孙宏斌频变“脸谱” 乐视网该何去何从?
  20. java ci框架_CI(CodeIgniter)框架介绍

热门文章

  1. Tomcat - 都说Tomcat违背了双亲委派机制,到底对不对?
  2. WebView完全解读
  3. android:descendantFocusability
  4. 在计算机上工作用英语怎么说,“Go to work”是“去上班”,那“上夜班”用英语怎么说呢?...
  5. python 有效的字母异位词
  6. 小米6 android os,脱离安卓!小米6刷入全新系统:界面炫酷,可流畅日常使用!...
  7. java string转bytebuf,如何将Java字符串转换为字节[]?
  8. python字符计数怎样去除空格_去除python中的字符串空格的简单方法
  9. 安卓屏幕适配方案(根据今日头条方案,升级版)
  10. wordpress外部调用到html_Spring 自调用事务失效,你是怎么解决的?