[BZOJ5064]B-number

题目大意:

求\(1\sim n(n\le10^{15})\)间有多少数满足是\(13\)的倍数且包含字符串\(13\)。

思路:

数位DP。\(f[i][j][k]\)表示考虑\(i\)位,模\(13\)余数是\(j\),上一位数字是\(k\)时的方案数。

源代码:

#include<cstdio>
#include<cctype>
#include<utility>
#include<cstring>
typedef long long int64;
inline int64 getint() {
register char ch;
while(!isdigit(ch=getchar()));
register int64 x=ch^'0';
while(isdigit(ch=getchar())) x=(((x<<2)+x)<<1)+(ch^'0');
return x;
}
int d[16];
int64 pwr[16];
typedef std::pair<int64,int64> Node;
Node f[16][13][10];
Node dp(const int &dep,const bool &zero,const bool &limit,const int &r,const int &last) {
if(dep==0) return std::make_pair(!zero&&!r,0);
const int lim=limit?d[dep]:9;
if(!zero&&!limit&&f[dep][r][last]!=(Node){-1,-1}) return f[dep][r][last];
Node ret=std::make_pair(0,0);
for(register int i=0;i<=lim;i++) {
const Node p=dp(dep-1,zero&&!i,limit&&i==lim,(r+i*pwr[dep])%13,i);
if(last==1&&i==3) {
ret.second+=p.first;
} else {
ret.first+=p.first;
}
ret.second+=p.second;
}
if(!zero&&!limit) f[dep][r][last]=ret;
return ret;
}
inline int64 solve(int64 x) {
for(;x;x/=10) {
d[++d[0]]=x%10;
pwr[d[0]]=d[0]==1?1:pwr[d[0]-1]*10%13;
}
return dp(d[0],true,true,0,0).second;
}
int main() {
memset(f,-1,sizeof f);
const int64 n=getint();
printf("%lld\n",solve(n));
return 0;
}

最新文章

  1. C#中ToString()格式详解
  2. qt 定时器
  3. py-faster-rcnn(running the demo): ubuntu14.04+caffe+cuda7.5+cudnn5.1.3+python2.7环境搭建记录
  4. Origami – 用于 Quartz 的免费的交互设计框架
  5. Query Profiler 和Explain 用法详解
  6. XP系统VPN设置
  7. ETLLib库走读
  8. 一个简单的win32窗口
  9. jquery左右切换的无缝滚动轮播图
  10. 2、jQuery的一些静态方法
  11. 基于Retrofit2.0+RxJava+Dragger2实现不一样的Android网络构架搭建(转载)
  12. 计算机图形学----基于3D图形开发技术 (韩正贤 著)
  13. 临时的ThisCall
  14. 数组排序自定义comparator()
  15. 如何利用redis key过期事件实现过期提醒
  16. jQuery.data() 的实现方式,jQuery16018518865841457738的由来,jQuery后边一串数字的由来
  17. Spark2 探索性数据统计分析
  18. Spring Security构建Rest服务-1201-Spring Security OAuth开发APP认证框架之实现服务提供商
  19. PHP面向对象之抽象类,抽象方法
  20. wampserver 点击跳转localhost变0.0.0.0的解决方法!

热门文章

  1. python3 HTMLTestRunner.py
  2. Python中的日志处理
  3. Django认证系统auth认证
  4. PyCharm之python书写规范--消去提示波浪线
  5. Android自定义View+贝赛尔曲线
  6. [转] 使用babel-plugin-react-css-modules简化CSS Modules的使用
  7. [转]docker安装elk
  8. NLS_CHARACTERSET和NLS_NCHAR_CHARACTERSET
  9. Codeforces 219E Parking Lot 线段树
  10. JS uint8Array转String