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数总 ...
随机推荐
- C#事件实现文件下载时进度提醒
C#中的事件是建立在委托的基础上,标准的事件模型应该包括以下几点: 声明一个用于定义事件的委托,这里用系统自带的泛型委托原型EventHandler<TEventArgs>,如:publi ...
- Jenkins忘记用户名密码
一.进入C盘.jenkins配置文件中找到config.xml 需要删除一下内容: <useSecurity>true</useSecurity> <authorizat ...
- 使用postman做接口测试(一)
参考大神的总结:https://www.cnblogs.com/Skyyj/p/6856728.html 一,先了解一下基础知识,虽然工作中没什么卵用,但背会了,可以显摆自己很专业的样子,以下内容来自 ...
- java基础49 IO流技术(对象输入流/对象输出流)
1.对象输入输出流 对象注意作用是用于写对象信息与读取对象信息 1.对象输出流:ObjectOutputStream 2.对象输入流:ObjectInputStream 2.对象输入输出流的步骤 ...
- TCP包服务器接受程序
//功能:客户端发送TCP包,此程序接受到,将字母转换为大写,在发送到客户端#include <stdio.h>#include <sys/socket.h>#include ...
- ThinkPHP文件目录说明
1.ThinkPHP文件包下目录结构说明 2.ThinkPHP文件目录下文件说明 3.Conf目录下 4.Library目录
- SQL Server数据库存在判断语句及系统表简介
Transact-SQL Exists Sentences--判断数据库是否存在IF EXISTS(SELECT * FROM master.sysdatabases WHERE name=N'库名' ...
- SQLSERVER 2008 编辑所有或者任意行
选中表 右键选择“编辑前200行”,然后选择左上角的 sql图标,然后在右侧的SQL语句去掉 top 200 然后执行查询 就可以编辑所有的行了,可以选择自己需要写SQL,然后查询编辑. 第二种方法: ...
- spark集群安装[转]
[转]http://sofar.blog.51cto.com/353572/1352713 ====================================================== ...
- 【LOJ】#2046. 「CQOI2016」路由表
题解 题面太长无法阅读系列-- 这里说的选择改变指的是在下面区间里碰上了一个更长的可匹配的地址,如果可匹配但是匹配长度没有当前的值大,那么不算改变 我们建一个可持久化的trie,查询的时候先在前\(a ...