hdu 3652 B-number

Problem Description
A wqb-number, or B-number for short, is a non-negative integer whose decimal form contains the sub- string “13” and can be divided by 13. For example, 130 and 2613 are wqb-numbers, but 143 and 2639 are not. Your task is to calculate how many wqb-numbers from 1 to n for a given integer n.

Input
Process till EOF. In each line, there is one positive integer n(1 <= n <= 1000000000).

Output
Print each answer in a single line.

Sample Input

13
100
200
1000

Sample Output

1
1
2
2

参考了Qiuqiqiu特别是递推中使用的加法来mod(开始我使用的是减法,很难看)下面是我的总结;
思路:
1. 和3555Bomb一样,要含有13,可知第二维要表示是否含13,首位是否为3以及已经含13三种,还有一个就是整除问题;拓展一维来表示余数,其余的一样操作;当最高位为0时,表示所有小于n位数的数符合的情况,所以在高位相同,且高位中已经含有 ‘13’时直接加不含 ‘13’的个数即可;
2. **当第i位为1时,由求的是小于n的所有符合数可知在模拟第i位时只会模拟到0,那么加的只是f[i-1][2][]的所有符合的情况;那这个1一定要浪费吗?当你是取i-1位从0~9时,答案是的。但是当只要存在13时(整除在三维中模拟),还要看后一位是否大于3….(特别的地方);

#include<bits/stdc++.h>
using namespace std;
#define rep(i,n) for(int (i) = 0;i < (n);i++)
int f[][][];
int bit[];
void init()
{
memset(f,,sizeof(f));
bit[] = ;
for(int i = ;i < ;i++) bit[i] = bit[i-]*%;
f[][][] = ;
for(int i = ;i <= ;i++)
for(int k = ;k < ;k++){//直接按照需要的数来递推
for(int j = ;j <= ;j++)
f[i+][][(k+j*bit[i+])%] += f[i][][k];
f[i+][][(k+bit[i+])%] -= f[i][][k];
f[i+][][(k+bit[i+]*)%] += f[i][][k];//指定来加~~;
f[i+][][(k+bit[i+])%] += f[i][][k];
for(int j = ;j <= ;j++)
f[i+][][(k+bit[i+]*j)%] += f[i][][k];
}
}
int query(int n)
{
int d[]={},tot = ;
while(n){
d[++tot] = n % ;
n /= ;
}
int ans = ,mod = ,flag = ;
for(int i = tot;i > ;mod = (mod + d[i]*bit[i])%,i--){
for(int j = ;j < d[i];j++)
ans += f[i-][][( - (mod + j*bit[i])%)%];
if(flag){
for(int k = ;k < d[i];k++){
ans += f[i-][][( - (mod + k * bit[i])%)%];
}
continue;
}
if(d[i] > ) ans += f[i-][][( - (mod + bit[i])%)%];
if(d[i+] == && d[i] > ) ans += f[i][][(-mod)%];
if(d[i+] == && d[i] == ) flag = ;
}
return ans;
}
int main()
{
init();
int n;
while(scanf("%d",&n) == ){
printf("%d\n",query(n+));
}
}
 

数位DP入门之hdu 3652 B-number的更多相关文章

  1. 数位DP入门之hdu 3555 Bomb

    hdu 3555 Bomb 题意: 在1~N(1<=N<=2^63-1)范围内找出含有 ‘49’的数的个数: 与hdu 2089 不要62的区别:2089是找不不含 '4'和 '62'的区 ...

  2. HDU 2089 不要62【数位DP入门题】

    不要62 Time Limit: 1000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others)Total Submis ...

  3. hdu3555 Bomb 数位DP入门

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=3555 简单的数位DP入门题目 思路和hdu2089基本一样 直接贴代码了,代码里有详细的注释 代码: ...

  4. xbz分组题B 吉利数字 数位dp入门

    B吉利数字时限:1s [题目描述]算卦大湿biboyouyun最近得出一个神奇的结论,如果一个数字,它的各个数位相加能够被10整除,则称它为吉利数.现在叫你计算某个区间内有多少个吉利数字. [输入]第 ...

  5. 数位dp入门 hdu2089 不要62

    数位dp入门 hdu2089 不要62 题意: 给定一个区间[n,m] (0< n ≤ m<1000000),找出不含4和'62'的数的个数 (ps:开始以为直接暴力可以..貌似可以,但是 ...

  6. HDU 2089 - 不要62 - [数位DP][入门题]

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=2089 Time Limit: 1000/1000 MS (Java/Others) Memory Li ...

  7. HDU 2089 不要62(数位dp入门)

    题意:统计区间 [a,b] 中不含 4 和 62 的数字有多少个. 题解:这是数位DP的入门题了,首先要理解数DP的原理,DP[i][j]:代表第i位的第j值,举个栗子:如4715   数位数是从右向 ...

  8. Hdu 2089 不要62 (数位dp入门题目)

    题目链接: Hdu 2089 不要62 题目描述: 给一个区间 [L, R] ,问区间内不含有4和62的数字有多少个? 解题思路: 以前也做过这个题目,但是空间复杂度是n.如果数据范围太大就GG了.今 ...

  9. 数位dp入门 HDU 2089 HDU 3555

    最基本的一类数位dp题,题目大意一般是在a~b的范围,满足某些要求的数字有多少个,而这些要求一般都是要包含或者不包含某些数字,或者一些带着数字性质的要求,一般来说暴力是可以解决这一类问题,可是当范围非 ...

随机推荐

  1. js 数组详解(javascript array)

    Array Array 对象用于在单个的变量中存储多个值. 构造函数: 1)   new Array(); 2)   new Array(size); 3)   new Array(element0, ...

  2. 利用Continuous Testing实现Eclipse环境自己主动单元測试

    当你Eclipse环境中改动项目中的某个方法时,你可能因为各种原因没有执行单元測试,结果代码提交,悲剧就可能随之而来. 所幸infinitest(http://infinitest.github.io ...

  3. Jmail的邮件发送

    下载注册dll文件 1. dll文件下载 2.到jmail.dll所在目录,运行cmd regsvr32 目录/jmail.dll 3.c#程序中,行首引用代码 using jmail C#示例代码 ...

  4. java11 Guava:谷歌开发的集合库

    Guava:谷歌开发的集合库,通过build path->Add External JARs 把guava.jar包加进去. 版本控制工具:.CVS .SVN .git 所以需要下载git客户端 ...

  5. partition例子

    10.13 标准库定义了名为partition的算法,它接受一个谓词,对容器内容进行划分,使得谓词为true的值会排在容器的前半部分,而使谓词为false的值会排在后半部分.算法返回一个迭代器,指向最 ...

  6. Spring安全资料整理列表

    Spring 被爆漏洞,允许远程执行代码http://automationqa.com/forum.php?mod=viewthread&tid=2827&fromuid=21 Spr ...

  7. SqlMgmt sql2008报错

    标题: Microsoft SQL Server Management Studio------------------------------ 无法显示请求的对话框. --------------- ...

  8. Sublime Text 使用简介

    Sublime Text使用介绍 如果说Notepad++是一款不错Code神器,那么Sublime Text应当称得上是神器滴哥.Sublime Text最大的优点就是跨平台,Mac和Windows ...

  9. C10K问题2

    http://blog.csdn.net/zhoudaxia/article/details/12920993 是时候让 Web 服务器同时处理一万客户端了,你不觉得吗?毕竟,现在的 Web 是一个大 ...

  10. 深入理解Java的接口和抽象类 _摘抄

    http://www.cnblogs.com/dolphin0520/p/3811437.html 原文 深入理解Java的接口和抽象类 对于面向对象编程来说,抽象是它的一大特征之一.在Java中,可 ...