HDU
来源:互联网 发布:我的世界泰拉瑞亚js 编辑:程序博客网 时间:2024/05/22 05:11
题目链接 : 杭电3652
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.
131002001000
1122题意:输入n,求1到n有多少个数是b数~即能被13整除且含有13字符串
#include<stdio.h>#include<iostream>#include<set>#include<math.h>#include<algorithm>#include<string.h>#include<string>#include<queue>#include<vector>using namespace std;#define long long llconst int inf = 0x3f3f3f3f;int dp[15][15][3];int digt[15];///0表示不含13,1表示不含13但是末尾是1,2表示包含13int dfs(int pos , int mod , int flag , bool limit) { if(pos < 0) return flag == 2 && mod == 0; if(!limit && dp[pos][mod][flag] != -1) return dp[pos][mod][flag]; int prepos = limit ? digt[pos] : 9; int ans = 0 ; for(int i =0 ; i <= prepos ; i ++) { int nowmod = (mod * 10 + i)%13; int nowflag = flag; if(flag == 1 && i == 3) { nowflag = 2; } else if(flag == 0 && i == 1) { nowflag = 1; } else if(flag == 1 && i != 3 && i != 1) { nowflag = 0; } ans += dfs(pos - 1 , nowmod , nowflag , limit && i == prepos); } if(!limit) dp[pos][mod][flag] = ans; return ans;}int solve(int x) { memset(digt , 0 , sizeof(digt)); int k = 0; while(x) { digt[k++] = x % 10; x /= 10; } return dfs(k - 1 , 0 , 0 , 1);}int main(){ memset(dp , -1 , sizeof(dp)); int n ; while(~scanf("%d" , &n)) { printf("%d\n" , solve(n)); } return 0;}
阅读全文
0 0
- hdu
- hdu
- HDU
- hdu ()
- hdu
- hdu
- HDU
- HDU
- hdu
- hdu
- HDU
- Hdu
- hdu
- hdu-
- hdu
- hdu
- hdu
- HDU
- C#窗体应用程序 vs + sql server2008连接举例,简单的学生信息管理系统 补充注册页面,如有侵权,请联系本人删除
- 安装Ubuntu16.04(64)后的常用软件的安装
- RHCSA考试题练习
- wpf自定义计时器控件
- 曹可爱之最可爱-Vue.js入门(九)表单输入绑定
- HDU
- JAVA中连接HBASE的常用API
- 不知道STAR法则还敢去面试?备受500强HR推崇的STAR法则详解
- 移动Web前端开发高效实战(一)
- 记录自己的django学习
- 小白成长之路(6)--快速排序
- 应用软件>程序员必备知识(一)
- vue 短信验证码
- Financial engineering and risk management