4521: [Cqoi2016]手机号码

Time Limit: 10 Sec Memory Limit: 512 MB

Submit: 1030 Solved: 609

[Submit][Status][Discuss]

Description

人们选择手机号码时都希望号码好记、吉利。比如号码中含有几位相邻的相同数字、不含谐音不

吉利的数字等。手机运营商在发行新号码时也会考虑这些因素,从号段中选取含有某些特征的号

码单独出售。为了便于前期规划,运营商希望开发一个工具来自动统计号段中满足特征的号码数

量。

工具需要检测的号码特征有两个:号码中要出现至少3个相邻的相同数字,号码中不能同

时出现8和4。号码必须同时包含两个特征才满足条件。满足条件的号码例如:13000988721、

23333333333、14444101000。而不满足条件的号码例如:1015400080、10010012022。

手机号码一定是11位数,前不含前导的0。工具接收两个数L和R,自动统计出[L,R]区间

内所有满足条件的号码数量。L和R也是11位的手机号码。

Input

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

10^10 < = L < = R < 10^11

Output

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

Sample Input

12121284000 12121285550

Sample Output

5

样例解释

满足条件的号码: 12121285000、 12121285111、 12121285222、 12121285333、 12121285550

HINT

Source

数位dp

\(dp[now][n4][n8][l][r][s][t][las]\)分别表示枚举到第i位时,有没有出现过4,有没有出现过8,卡不卡左边界,卡不卡右边界,有没有过连续三个数相同,结尾连续几个数相同,上一位的值


#include<iostream>
#include<cstdio>
#include<cstring>
#include<algorithm>
#include<cmath>
#define max(a,b) ((a)>(b) ? (a): (b))
#define min(a,b) ((a)<(b) ? (a): (b))
#define LL long long
using namespace std; LL i,n,m,j,k,a[13][2][2][2][2][2][5][11],b[12],c[12];
LL ans; int main()
{
for(i=1;i<=11;i++) scanf("%1ld",&b[i]);
for(i=1;i<=11;i++) scanf("%1ld",&c[i]); for(i=b[1];i<=c[1];i++)
{
LL t,g;
if(i==4) t=1; else t=0;
if(i==8) g=1; else g=0;
LL l=(i==b[1])?1:0;
LL r=(i==c[1])?1:0;
a[1][t][g][l][r][0][1][i]=1;
} for(i=2;i<=11;i++)
for(LL b4=0;b4<=1;b4++)
for(LL b8=0;b8<=1;b8++)
for(LL l=0;l<=1;l++)
for(LL r=0;r<=1;r++)
for(LL s=0;s<=1;s++)
for(LL t=0;t<3;t++)
for(LL las=0;las<=9;las++)
{
if(!a[i-1][b4][b8][l][r][s][t][las]) continue;
for(j=0;j<=9;j++)
{ LL n4=0,n8=0,ll=0,rr=0,ss=0,gs=1;
if(b4 && b8) continue;
if(b4 && (j==8)) continue;
if(b8 && (j==4)) continue;
if(l && (j<b[i])) continue;
if(r && (j>c[i])) continue;
if(b4 || (j==4)) n4=1;
if(b8 || (j==8)) n8=1;
if(l && (j==b[i])) ll=1;
if(r && (j==c[i])) rr=1;
if(j==las) gs=t+1;
else gs=1;
if((gs==3) || s) ss=1;
if(gs==3) gs=1;
a[i][n4][n8][ll][rr][ss][gs][j]+=a[i-1][b4][b8][l][r][s][t][las];
if((i==11) && ss) ans+=(LL)a[i-1][b4][b8][l][r][s][t][las];
}
}
printf("%lld",ans);
}

可以说是非常美观的代码了=v=

4521: [Cqoi2016]手机号码的更多相关文章

  1. bzoj 4521 [Cqoi2016]手机号码——数位dp

    题目:https://www.lydsy.com/JudgeOnline/problem.php?id=4521 dfs真好用~ #include<iostream> #include&l ...

  2. BZOJ 4521 [CQOI2016]手机号码 - 数位DP

    Description 在$[L, R]$找出有几个数满足两个条件 : 1 : 不同时含有$4$ 和 $8$ 2 : 至少有$3$个相邻的数相同 Solution 非常容易的数位DP, $pos$ 为 ...

  3. bzoj 4521: [Cqoi2016]手机号码

    感觉get到了一种数位dp的新姿势,加一位表示当前要填的数有没有限制(感觉以前的写法都太蠢了). 这么写有两个地方要注意: 1.每dp到一位时需要f[i][初始状态]++,相当于这位前都是前导零(这道 ...

  4. bzoj 4521: [Cqoi2016]手机号码【数位dp】

    比较基础的数位dp,dfs的时候带上上一位,上上位,是否已经有连续3个相同位,是否有4,是否有8即可 但是要注意两点(在洛谷上一直70) 当l=1e10的时候,直接输出clc(r)即可,因为如果再减去 ...

  5. [BZOJ4521][CQOI2016]手机号码(数位DP)

    4521: [Cqoi2016]手机号码 Time Limit: 10 Sec  Memory Limit: 512 MBSubmit: 875  Solved: 507[Submit][Status ...

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

    4521: [Cqoi2016]手机号码 Time Limit: 10 Sec  Memory Limit: 512 MBSubmit: 870  Solved: 505[Submit][Status ...

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

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

  8. P4124 [CQOI2016]手机号码

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

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

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

随机推荐

  1. Java注解(三)

    上一篇了解了自定义注解的使用,不过里面的例子没有多大使用价值,这一回来个有用点的Demo. 目标:将实体bean保存到数据库 先来定义一个实体注解 import java.lang.annotatio ...

  2. Android 使用全局变量的问题

    现在每天都在忙,而且一忙起来,就把写笔记的事情放在了后面,最近在写程序的时候,突然要使用全局变量,就按照以前的方式,写了一个类,然后把变量都声明为静态变量,然后做为全局变量使用,但是在进行Activi ...

  3. gulp入门实践

    前言:大家可能都听说过gulp,知道它是一种前端自动化开发工具,可以用来文件压缩.语法检查.文件合并和编译less等,但可能并不知道要怎么用?看过官方文档,也看过许多博客,但基本都是讲gulp的API ...

  4. House of Roman 实战

    前言 这是前几天国外一个 老哥 提出的一种思路 ,学习了一下感觉其中的堆布局的手法还不错,做个分享与记录. 这种利用手法的主要特点是不需要 leak libc的地址,通过 堆内存的布局 和 堆相关的漏 ...

  5. java 内存分析之static

    源码: 内存分析: 源码: 静态方法:   用static 声明的方法为静态方法,在调用该方法时,不会将对象的引用传递给它,所以在static 方法中不可访问非static 的成员.   可以通过对象 ...

  6. 浅谈java动态代理

  7. 福大软工1816:Beta(5/7)

    Beta 冲刺 (5/7) 队名:第三视角 组长博客链接 本次作业链接 团队部分 团队燃尽图 工作情况汇报 张扬(组长) 过去两天完成了哪些任务 文字/口头描述 组织会议 确定统一界面wxpy.db之 ...

  8. zTree实现权限列表简单实例

    zTree的简单实例 zTree 是一个依靠jQuery 实现的多功能 "树插件".优异的性能.灵活的配置.多种功能的组合是 zTree 最大优点. zTree官网 zTreeAP ...

  9. 关于3d打印

    3d打印技术是20世纪90年代逐渐兴起的一项先进的制造技术.3D打印——three-dimensional printing,简称3dp.又称三维打印或立体打印,最早由美国麻省理工学院于1993年开发 ...

  10. mysqldump的假注释

    今天在查看mysqldump内容的时候,发现类似注释的东西,仔细了解了下, If you add a version number after the “!” character, the synta ...