codeforces 55D
2016-02-24 19:34
337 查看
题目链接:http://codeforces.com/problemset/problem/55/D
注意内存
2520是2~9的最大公约数,
注意内存
2520是2~9的最大公约数,
#include <cstdio> #include <cstdlib> #include <cstring> using namespace std; typedef __int64 ll; int num[20]; ll dp[20][2520][256];//256的二进制表示2~9的有无 bool check(int tra, int mod) { for(int i = 0; i < 8; i++) { if(mod&(1<<i)) { if(tra%(i+2) != 0) return false; } } return true; } ll dfs(int len,int tra,int mod,int fp)//tra是len位之前取模2520的结果 { if(!len) { if(!tra || check(tra,mod)) return 1; return 0; } if(!fp && dp[len][tra][mod]!=-1) return dp[len][tra][mod]; int fpmax = fp ? num[len] : 9; int tmp;//tmp暂时存放mod; ll ret = 0; for(int i = 0; i <= fpmax; i++) { tmp = mod; if(i > 1) tmp|=(1<<(i-2)); ret += dfs(len-1,(tra*10+i)%2520,tmp,fp&&i==fpmax); } if(!fp) dp[len][tra][mod] = ret; return ret; } ll calc(ll x) { int len = 0; while(x) { num[++len] = x%10; x/=10; } return dfs(len,0,0,true); } int main() { int t; ll l,r; scanf("%d",&t); memset(dp,-1,sizeof(dp)); while(t--) { scanf("%I64d %I64d",&l,&r); printf("%I64d\n",calc(r)-calc(l-1)); } return 0; }
相关文章推荐
- 理解UART
- C++ 中关于new的介绍
- centos6.5下vsftpd服务的安装及配置并通过pam认证实现虚拟用户文件共享
- centos6.5下vsftpd服务的安装及配置并通过pam认证实现虚拟用户文件共享
- 接口实现Fragment、Activity间互调解耦
- WIN7启动项删除
- leetcode MajorityElement相关问题
- C语言深度剖析-----数组与指针分析
- 单实例单向rac搭建gg流
- Leetcode之super ugly number
- 今天看到的一个攻击
- linux c Makefile 文件制作(由简至繁)
- <Perl语言入门>读书笔记 | 一. 简介
- Android Init Language
- 2014编程之美:奇妙的数列
- hibernate开发(2)
- linux 安装sysstat使用iostat、mpstat、sar、sa
- 【总结】Nginx日志分割
- 隐式类型转换
- code vs 1287 矩阵乘法