#2044. 「CQOI2016」手机号码

内存限制:256 MiB时间限制:1000 ms标准输入输出
题目类型:传统评测方式:文本比较
上传者: 匿名

题目描述

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

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

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

输入格式

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

输出格式

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

样例

样例输入

12121284000 12121285550

样例输出

5

样例解释

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

数据范围与提示

对于 30%30\%30% 的数据,R−L≤107R - L \leq 10^7R−L≤10​7​​;
对于 100%100\%100% 的数据,1010≤L≤R<101110^{10} \leq L \leq R < 10^{11}10​10​​≤L≤R<10​11​​。

#include<iostream>
#include<cstdio>
#include<cstring>
using namespace std;
int a[];
long long l,r,f[][][][][][];
long long dfs(int pos,int p1,int p2,bool p3,bool p4,bool p8,bool limit) {
if(p4&&p8) return ;
if(pos==) {return p3;}
if(!limit && f[pos][p1][p2][p3][p4][p8]!=-)return f[pos][p1][p2][p3][p4][p8];
int End=;
if(limit)End=a[pos];
long long ans=;
for(int i=;i<=End;i++)
ans+=dfs(pos-,p2,i,(p1==p2&&p2==i)||p3,(i==)||p4,(i==)||p8,limit&&(i==a[pos]));
if(!limit)f[pos][p1][p2][p3][p4][p8]=ans;
return ans;
}
long long solve(long long x) {
int len=;
while(x){
len++;
a[len]=x%;
x/=10LL;
}
long long res=;
for(int i=;i<=a[len];i++)
res+=dfs(len-,,i,,i==,i==,i==a[len]);
return res;
}
int main() {
memset(f,-,sizeof(f));
cin>>l>>r;
if(l==) cout<<solve(r);
else cout<<solve(r)-solve(l-);
return ;
}

loj #2044. 「CQOI2016」手机号码的更多相关文章

  1. LibreOJ2044 - 「CQOI2016」手机号码

    Portal Description 给出两个十一位数\(L,R\),求\([L,R]\)内所有满足以下两个条件的数的个数. 出现至少\(3\)个相邻的相同数字: 不能同时出现\(4\)和\(8\). ...

  2. loj2044 「CQOI2016」手机号码

    ref #include <iostream> #include <cstring> #include <cstdio> using namespace std; ...

  3. LoibreOJ 2042. 「CQOI2016」不同的最小割 最小割树 Gomory-Hu tree

    2042. 「CQOI2016」不同的最小割 内存限制:256 MiB时间限制:1000 ms标准输入输出 题目类型:传统评测方式:文本比较 上传者: 匿名 提交提交记录统计讨论测试数据   题目描述 ...

  4. Loj #2192. 「SHOI2014」概率充电器

    Loj #2192. 「SHOI2014」概率充电器 题目描述 著名的电子产品品牌 SHOI 刚刚发布了引领世界潮流的下一代电子产品--概率充电器: 「采用全新纳米级加工技术,实现元件与导线能否通电完 ...

  5. Loj #3096. 「SNOI2019」数论

    Loj #3096. 「SNOI2019」数论 题目描述 给出正整数 \(P, Q, T\),大小为 \(n\) 的整数集 \(A\) 和大小为 \(m\) 的整数集 \(B\),请你求出: \[ \ ...

  6. Loj #3093. 「BJOI2019」光线

    Loj #3093. 「BJOI2019」光线 题目描述 当一束光打到一层玻璃上时,有一定比例的光会穿过这层玻璃,一定比例的光会被反射回去,剩下的光被玻璃吸收. 设对于任意 \(x\),有 \(x\t ...

  7. Loj #3089. 「BJOI2019」奥术神杖

    Loj #3089. 「BJOI2019」奥术神杖 题目描述 Bezorath 大陆抵抗地灾军团入侵的战争进入了僵持的阶段,世世代代生活在 Bezorath 这片大陆的精灵们开始寻找远古时代诸神遗留的 ...

  8. Loj #2542. 「PKUWC2018」随机游走

    Loj #2542. 「PKUWC2018」随机游走 题目描述 给定一棵 \(n\) 个结点的树,你从点 \(x\) 出发,每次等概率随机选择一条与所在点相邻的边走过去. 有 \(Q\) 次询问,每次 ...

  9. Loj #3059. 「HNOI2019」序列

    Loj #3059. 「HNOI2019」序列 给定一个长度为 \(n\) 的序列 \(A_1, \ldots , A_n\),以及 \(m\) 个操作,每个操作将一个 \(A_i\) 修改为 \(k ...

随机推荐

  1. mjpg-streamer移植

    本文的copyright归yuweixian4230@163.com 所有,使用GPL发布,可以自由拷贝,转载.但转载请保持文档的完整性,注明原作者及原链接,严禁用于任何商业用途. 作者:yuweix ...

  2. c#学习之路---壁咚漏洞搜索

    每次出漏洞都会用JAVA去写,不过JAVA你懂得,写GUI每次画图很吃力. 于是左右学习了下c#,期间也得到表哥storm7kb的帮助,要不然这个表格与数据绑定不知道c#怎么弄. 上一下图吧: --- ...

  3. windows黑科技-记录dns log

    昨天看到袁哥微博,看到了这篇,今天测试了一下,记录下来: The DNS Client service does not log by default. However, if a file name ...

  4. #测试两种不同的SVM,rbf的核真是太棒了(一种会拐弯的边界)

    from sklearn import datasets import numpy as np X, y = datasets.make_blobs(n_features=2, centers=2) ...

  5. 用原生JS和html5进行视频截图并保存到本地

    <!doctype html> <html> <head> <meta charset="utf-8"> <title> ...

  6. ubuntu 12.04 下 eclipse关联 source code

    一.JDK source code 命令行中: sudo apt-get install openjdk-7-source 下好的jdk源码在 Linux 在目录 usr/lib/jvm/openjd ...

  7. sql中IN的用法

    1.和where配合使用 IN操作符允许我们在where的子句中规定多个值 SELECT * FROM Persons  WHERE LastName IN ('Adams','Carter') 这句 ...

  8. iframe自适应高度(转)

    iframe自适应高度 (2013-04-23 17:29:49) 标签: iframe 高度 自适应 js 杂谈 分类: 网页制作 有时候我们的网站需要引入其他网站的东西,比如评论,这时候就需要使用 ...

  9. 基于R语言的RRT算法效率统计

  10. 用C++实现void reverse(char* str)函数,即反转一个null结尾的字符串.

    void reverse(char* str) { char *end = str, *begin=str; char temp; while(*end!='\0') { end++; } end-- ...