sdut 3904 数位dp(题目数据范围是错的)
来源:互联网 发布:淘宝店铺如何一件代发 编辑:程序博客网 时间:2024/06/06 03:25
#include<iostream>#include<cstdio>#include<cstring>using namespace std;int num[10][10],sum[10],pow_ten[10],cnt,a[10],ans;void init(){ num[2][4]=1; sum[2]=1; int i,j; for(i=1,pow_ten[0]=1;i<=9;i++) pow_ten[i]=pow_ten[i-1]*10; for(i=3;i<=9;i++) { for(j=0;j<4;j++) num[i][j]=sum[i-1]; num[i][j]=pow_ten[i-2]+sum[i-1]-num[i-1][7]; for(++j;j<10;j++) num[i][j]=sum[i-1]; sum[i]=sum[i-1]*10+pow_ten[i-2]-num[i-1][7]; }}void dfs(int k,bool fro){ if(fro) { int res=0; while(k) { res=res*10+a[k]; k--; } ans+=res+1; return; } if(!k) return; for(int i=0;i<a[k];i++) ans+=num[k][i]; if(a[k]>7&&k+1<cnt&&a[k+1]==4) ans+=pow_ten[k-1]-num[k][7]; dfs(k-1,(a[k]==7&&k+1<cnt&&a[k+1]==4)?true:false);}int solve(int n){ cnt=1;ans=0; while(n) { a[cnt++]=n%10; n/=10; } dfs(cnt-1,false); return ans;}bool cal(int n){ while(n>=10) { if(n%100==47) return true; n/=10; } return false;}int check(int n){ int cnt=0; for(int i=1;i<=n;i++) { if(cal(i)) cnt++; } return n-cnt;}int main(){ int i,j,t,s,e; init(); scanf("%d",&t); while(t--&&scanf("%d%d",&s,&e)!=EOF) printf("%d\n",e-s+1-solve(e)+solve(s-1)); return 0;}
阅读全文
0 0
- sdut 3904 数位dp(题目数据范围是错的)
- SDUT 3904 C~K的幸运数字(数位DP)
- 一个数位dp的题目
- HDOJ 题目3555 Bomb(数位dp)
- HDOJ 题目3555 Bomb(数位dp)
- HDOJ 题目3555 Bomb(数位DP)
- 数位dp基础题目
- 数位dp简单题目汇总
- HDU3555Bomb数位DP入门题目
- 数位DP:不要62(第一道题,主要是弄懂数位DP是啥意思)
- HDOJ 题目2089 不要62(数位DP,重刷)
- POJ 题目3252 Round Numbers(数位DP)
- 为什么btye类型的范围数据范围是-128~+127(详细易懂版)
- 简单的数位dp是怎样运行的
- SDUT 2609 A-Number and B-Number 二分+数位dp
- HDOJ题目2089 不要62(数位DP)
- bin巨的数(数位DP)
- [APIO2015]巴厘岛的雕塑(数位dp)
- 深度学习框架Caffe之常见错误
- EGit插件
- SQL事物的概念
- 正则表达式——IP地址的匹配
- [leetcode]: 437. Path Sum III
- sdut 3904 数位dp(题目数据范围是错的)
- Caffe模型训练之solver.prototxt配置
- [leetcode]: 374. Guess Number Higher or Lower
- Android
- 支付宝 口碑ISV开发:sign check fail: check Sign and Data Fail!JSON also!
- 子龙山人Learn Emacs in 21 Days: day 6 学习笔记
- Linux常用命令1
- hibernate orm数据源关系映射优化减少sql语句减少数据库压力
- 开发人员学Linux(4):使用JMeter对网站和数据库进行压力测试