BZOJ 4521 CQOI 2016 手机号码 数位DP
4521: [Cqoi2016]手机号码
Time Limit: 10 Sec Memory Limit: 512 MB
Submit: 539 Solved: 325
[Submit][Status][Discuss]
Description
Input
Output
输出文件内容只有一行,为1个整数,表示满足条件的手机号数量。
Sample Input
Sample Output
样例解释
满足条件的号码: 12121285000、 12121285111、 12121285222、 12121285333、 12121285550
HINT
Source
Solution
这是一道简单的数位DP,状态不难想:F[i][j][k1][k2][k3][k4][k5]。
表示做到第i位,放的数为j,最后连续两位是否相同,是否存在连续三位相同,是否出现过4,是否出现过8,前缀与原数前缀是否相同。
转移也是比较简单的,枚举上面的东西,再枚举第i+1位填什么,根据题意转移即可。
但是需要注意的是,初始化的时候需要弄一个第10位出来,否则判连续两位相同会比较伤。
而且一般情况下都是cal(r)-cal(l-1),如果固定11位来做的话就会出现问题,这时候可以用开区间来做,变成cal(r+1)-cal(l)。
Code
#include <cstdio>
#include <cstdlib>
#include <cstring>
#include <string>
#include <algorithm> using namespace std; #define FIO "a"
#define REP(i, a, b) for (int i = (a), i##_end_ = (b); i <= i##_end_; ++i)
#define mset(a, b) memset(a, b, sizeof(a))
const int maxn = ;
typedef long long LL;
LL f[maxn][maxn][][][][][], l, r;
//×öµ½µÚi룬×î¸ßλÊÇj£¬×îºóÁ½¸öÊýÊÇ·ñÁ¬Ðø£¬ÊÇ·ñÓÐÁ¬ÐøÈý¸öÏàͬ£¬ÊÇ·ñÓÐ4£¬ÊÇ·ñÓÐ8£¬Ç°×ºÓëÔÊýǰ׺µÄ¹ØÏµ LL cal(LL x)
{
mset(f, );
LL ans = ; int len = , digit[], a, b, c, d, e;
while (x) { digit[++len] = x%, x /= ; }
reverse(digit+, digit+len+);
f[][][][][][][] = ;
REP(i, , len-)
REP(j, , )
REP(k1, , )
REP(k2, , )
REP(k3, , )
REP(k4, , )
REP(k5, , )
if (f[i][j][k1][k2][k3][k4][k5])
REP(k, , )
{
if (k5 && k > digit[i+]) continue ;
if (k == j) a = ; else a = ;
if (!k2) b = (a+k1 == ); else b = k2;
if (!k3) c = (k == ); else c = k3;
if (!k4) d = (k == ); else d = k4;
if (c+d == ) continue ;
if (k5 && k == digit[i+]) e = ; else e = ;
f[i+][k][a][b][c][d][e] += f[i][j][k1][k2][k3][k4][k5];
}
REP(j, , )
REP(k1, , )
REP(k3, , )
REP(k4, , )
{
if (k3 && k4) continue ;
ans += f[len][j][k1][][k3][k4][];
}
return ans;
} int main()
{
// freopen(FIO ".in", "r", stdin);
// freopen(FIO ".out", "w", stdout);
scanf("%lld %lld", &l, &r);
printf("%lld\n", cal(r+)-cal(l));
return ;
}
BZOJ 4521 CQOI 2016 手机号码 数位DP的更多相关文章
- bzoj 4521 [ Cqoi 2016 ] 手机号码 —— 数位DP
题目:https://www.lydsy.com/JudgeOnline/problem.php?id=4521 数位DP,记录好多维状态: 写了半天,复杂得写不下去了,于是参考一下TJ... 练习简 ...
- [BZOJ 4455] [ZJOI 2016] 小星星 (树形dp+容斥原理+状态压缩)
[BZOJ 4455] [ZJOI 2016] 小星星 (树形dp+容斥原理+状态压缩) 题面 给出一棵树和一个图,点数均为n,问有多少种方法把树的节点标号,使得对于树上的任意两个节点u,v,若树上u ...
- BZOJ 4521 [CQOI2016]手机号码 - 数位DP
Description 在$[L, R]$找出有几个数满足两个条件 : 1 : 不同时含有$4$ 和 $8$ 2 : 至少有$3$个相邻的数相同 Solution 非常容易的数位DP, $pos$ 为 ...
- 【BZOJ-4521】手机号码 数位DP
4521: [Cqoi2016]手机号码 Time Limit: 10 Sec Memory Limit: 512 MBSubmit: 303 Solved: 194[Submit][Status ...
- [BZOJ4521][CQOI2016]手机号码(数位DP)
4521: [Cqoi2016]手机号码 Time Limit: 10 Sec Memory Limit: 512 MBSubmit: 875 Solved: 507[Submit][Status ...
- BZOJ.4513.[SDOI2016]储能表(数位DP)
BZOJ 洛谷 切了一道简单的数位DP,终于有些没白做题的感觉了...(然而mjt更强没做过这类的题也切了orz) 看部分分,如果\(k=0\),就是求\(\sum_{i=0}^n\sum_{j=0} ...
- [CQOI2016]手机号码 数位DP
[CQOI2016]手机号码 用来数位DP入门,数位DP把当前是否需要限制取数范围(是否正在贴着临界值跑,即下面的limited)和一切需要满足的条件全部塞进记忆化搜索参数里面就好了,具体情况转移便好 ...
- [Luogu P4124] [CQOI2016]手机号码 (数位DP)
题面 传送门:洛咕 Solution 感谢神仙@lizbaka的教学 这题是数位DP的非常非常模板的题目,只是状态有点多 . 这题我使用记忆化搜索实现的 中国有句古话说的好,有多少个要求就设多少个状态 ...
- [bzoj 1026]windy数(数位DP)
题目:http://www.lydsy.com/JudgeOnline/problem.php?id=1026 分析: 简单的数位DP啦 f[i][j]表示数字有i位,最高位的数值为j的windy数总 ...
随机推荐
- Lucene7.1.0版本的索引创建与查询以及维护,包括新版本的一些新特性探索!
一 吐槽 lucene版本更新实在太快了,往往旧版本都还没学会,新的就出来,而且每个版本改动都特别大,尤其是4.7,6,6,7.1.......ε=(´ο`*)))唉,但不可否认,新版本确实要比旧版本 ...
- MIUI7,Android版本5.0.2,一个程序发送自定义广播,另一个程序没有接收到
对照<第一行代码——Android>进行学习,第五章中说到广播包的相关知识,前面获取广播等程序例程都可以跑的通,但是在5.3.2节中,程序A发送自定义广播,并接收自定义广播,同时程序B也接 ...
- Kettle进行数据迁移(ETL)
由于开发新的系统,需要将之前一个老的C/S应用的数据按照新的数据设计导入到新库中.此过程可能涉及到表结构不一致.大数据量(千万级,甚至上亿)等情况,包括异构数据的抽取.清洗等等工作.部分复杂的工作需要 ...
- redis从入门到放弃 -> 部署方案
单点部署方案 环境准备: [root@localhost ~]# cat /etc/redhat-release CentOS Linux release 7.2.1511 (Core) [root@ ...
- mysql命令补全工具
需要在linux中下载mysql插件. 安装mysql插件 yum -y install epel-release python-pip python-devel pip install mycli ...
- Centos 软连接和硬链接
1.软链接: 建立软链接:ln -s /usr/local/node-v4.2.6-linux-x86/bin/node /usr/local/bin/node 解释:将/usr/local/node ...
- spotlight on mysql--安装以及简介
Spotlight on MySQL 安装与配置 第一步: 下载并安装mysql-connector-3.5x Spotlight on MySQL 连接mysql必须使用mysql-connecto ...
- jQuery使用JSONP时的错误处理
概述 什么是域,简单来说就是协议+域名或地址+端口,3者只要有任何一个不同就表示不在同一个域.跨域,就是在一个域中访问另一个域的数据. 如果只是加载另一个域的内容,而不需要访问其中的数据的话,跨域是很 ...
- 【剑指Offer面试题】 九度OJ1389:变态跳楼梯
转自:http://www.myexception.cn/program/1973966.html 时间限制:1 秒内存限制:32 兆特殊判题:否提交:2331解决:1332 题目描述: 一只青蛙一次 ...
- CVE-2012-4969
Microsoft Internet Explorer ‘CMshtmlEd::Exec’函数释放后使用漏洞(CNNVD-201209-394) Microsoft Internet Explorer ...