HDU 3652 B-number
来源:互联网 发布:2017淘宝双11销售冠军 编辑:程序博客网 时间:2024/05/17 03:42
B-number
Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others)Total Submission(s): 2558 Accepted Submission(s): 1405
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
131002001000
Sample Output
1122
Author
wqb0039
Source
2010 Asia Regional Chengdu Site —— Online Contest
解题思路:数位DP,具体见代码
#include <iostream>#include <cstdio>#include <cstring>#define N 11using namespace std;int dp[N][11][15],ten[N];int f[N][11][15],bit[12];//dp[i][j][k]长度为i,首位为j,mod13==k的不含13的数的个数//f[i][j][k]长度为i,首位为j,mod13==k的含13的数的个数void init(){ ten[0]=1; for(int i=1; i<N; i++) ten[i]=ten[i-1]*10; dp[0][0][0]=1; for(int i=1; i<N; i++) for(int j=0; j<10; j++) for(int k=0; k<13; k++) for(int a=0; a<10; a++) { int b=(ten[i-1]*a+k)%13; f[i][a][b]+=f[i-1][j][k]; if(a==1 && j==3)f[i][a][b]+=dp[i-1][j][k]; else dp[i][a][b]+=dp[i-1][j][k]; }}int calc(int x){ if(x<13)return 0; int m=0; while(x) { bit[++m]=x%10; x/=10; } int res=0,last=0,sum=0,kk; bool flag=false; for(int i=m; i>0; i--) { for(int j=0; j<bit[i]; j++) for(int k=0; k<13; k++) { kk=(sum+k)%13; if(kk==0) { res+=f[i][j][k]; if(flag) res+=dp[i][j][k]; if(!flag && j==3 && last==1) res+=dp[i][j][k]; } } if(bit[i]==3 && last==1)flag=true; last=bit[i]; sum+=bit[i]*ten[i-1]; } return res;}int main(){ init(); int n; while(scanf("%d",&n)!=EOF) { printf("%d\n",calc(n+1)); } return 0;}
0 0
- HDU 3652 B-number
- HDU 3652 B-number
- hdu 3652 B-number
- HDU 3652 B-number
- HDU 3652 B-number
- HDU-3652 B-number
- HDU 3652 B-number
- HDU 3652 B-number
- HDU 3652 B-number
- HDU 3652 B-number
- HDU 3652 B-number
- hdu 3652 B-number
- hdu 3652 B-number
- [hdu 3652] B-number
- HDU 3652 - B-number
- HDU 3652 B-number
- HDU 3652 B-number
- HDU 3652 B-number
- 25个让Java程序员更高效的Eclipse插件
- MFC开启与关闭外部进程
- dp,px,pt,sp 的区别 以及dp 和 px 互转
- hibernate之利用配置文件和annotation往数据库里插入数据
- JS事件:target与currentTarget区别
- HDU 3652 B-number
- table 列排序&行变色&按上下键光标在行上移动&上下移动行并保存DB
- Android源码学习之八—系统启动过程
- 数据结构(第1章: 概述)
- 最临近、双线性、三次卷积插值(图像放缩)
- 操作系统笔试题汇总
- nyoj 946 商业规划 STL(set)
- 数组的应用
- Android系统的智能指针实现原理分析