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. 设置navigationbar透明度时的坑

    1.需要设置导航条透明度时     UIImage *image = [UIImage imageNamed:@"bg_clear.png"]; //设置背景颜色 [nav2.na ...

  2. Access restriction: The type BASE64Encoder is not accessible due to restrict(转载)

    Access restriction: The type BASE64Encoder is not accessible due to restrict 2011年11月18日 20:47:06 阅读 ...

  3. 悟空模式-java-抽象工厂模式

    [一朝,王母娘娘设宴,大开宝阁,瑶池中做蟠桃胜会] 有一天,王母娘娘要在瑶池办party,就需要准备大量的食材.要知道,天上的神仙也分三六九等,九曜星.五方将.二十八宿.四大天王.十二元辰.五方五老. ...

  4. 移动web模拟客户端实现多方框输入密码效果

    不知道怎么描述标题,先看截图吧,大致的效果就是一个框输入一位密码. 最开始实现的思路是一个小方框就是一个type为password的input,每输入一位自动跳到下一位,删除一位就自动跳到前一位,an ...

  5. Aittit.attilax超级框架 api 规划大全

    Aittit.attilax超级框架 api 规划大全 1 Api分类2 1.1 核心2 1.2 属性2 1.3 CSS2 1.4 选择器2 1.5 文档处理3 1.6 筛选3 1.7 事件3 1.8 ...

  6. vue + skyline 搭建 一个开发环境

    1.之前用的是ext +  skyline搭建环境 ,正好最近是做前端的事情,有时间用vue + skyline 搭建一个三维场景 2.准备vue 2.x  ,UI 用的是iview 和element ...

  7. linux 命令及配置文件搜索命令which、whereis

    which /usr/bin/which 搜索命令所在目录及别名信息 which lsalias ls='ls --color=auto'/usr/bin/ls which rmalias rm='r ...

  8. main方法之args参数

    public class Demo { public static void main (String[] arr) { if (arr.length < 3) { System.out.pri ...

  9. 1 Java程序文件中函数起始行和终止行在程序文件位置中的判定__抽象语法树方法

    应用需求: 实现对BigCloneBench中函数体的克隆检测,必须标注出起始行号和终止行号. 问题: 给定一个Java文件,从中提取出每个函数的起始行和终止行. 难点: 这个问题的难点在于,对于Ja ...

  10. 从本机构建Windows应用程序虚拟机映像

    下图描述了总体的虚拟机映像的VHD生成,上传以及发布到 Azure 镜像市场的全过程: 具体步骤如下: 在本地计算机(Windows平台)上安装Hyper-V,并安装您所需要的虚拟机操作系统 在此操作 ...