BZOJ 1833 数位DP 解题报告
来源:互联网 发布:testflight软件下载 编辑:程序博客网 时间:2024/06/05 23:39
1833: [ZJOI2010]count 数字计数
Description
给定两个正整数a和b,求在[a,b]中的所有整数中,每个数码(digit)各出现了多少次。
Input
输入文件中仅包含一行两个整数a、b,含义如上所述。
Output
输出文件中包含一行10个整数,分别表示0-9在[a,b]中出现了多少次。
Sample Input
1 99
Sample Output
9 20 20 20 20 20 20 20 20 20
HINT
30%的数据中,a<=b<=10^6;
100%的数据中,a<=b<=10^12。
代码如下:(谁能告诉我为什么把主函数里的i定义到for里面就WA了)
#include<cstdio> #include<cstring> #include<iostream> #include<algorithm> using namespace std; long long ans[10],f[20]; inline void Resolve(long long x,long long pos) { while(x) ans[x%10]+=pos,x/=10; } void Digital_DP(long long x,int flag) { int i,j; long long pos,now; for(i=1,pos=10;pos<x;++i,pos*=10) { for(j=0;j<=9;j++) ans[j]+=f[i-1]*9*flag; for(j=1;j<=9;j++) ans[j]+=pos/10*flag; } now=pos/=10;--i; while(now<x) { while(now+pos<=x) { long long temp=now/pos; Resolve(temp,pos*flag); for(j=0;j<=9;j++) ans[j]+=f[i]*flag; now+=pos; } pos/=10;--i; } } int main() { int i,j; long long a,b,pos; f[1]=1; for(i=2,pos=10;i<=12;i++,pos*=10) f[i]=f[i-1]*10+pos; scanf("%lld%lld",&a,&b); Digital_DP(b+1,1); Digital_DP(a,-1); for(j=0;j<=9;j++) printf("%lld%c",ans[j],j==9?'\n':' '); return 0;}
阅读全文
0 0
- BZOJ 1833 数位DP 解题报告
- BZOJ 1820 DP 解题报告
- BZOJ 1566 DP 解题报告
- BZOJ 1419 DP 解题报告
- 数位DP学习 数位DP板子理解 CF55D解题报告
- HDU 2089 解题报告 数位DP
- HDU 2089 数位DP 解题报告
- HDU 4734 数位DP 解题报告
- POJ 3252 数位DP 解题报告
- HDU 3555 数位DP 解题报告
- HDU 3652 数位DP 解题报告
- BZOJ 1264 树状数组+DP 解题报告
- BZOJ 1227 DP+树状数组 解题报告
- BZOJ 4152 状压DP 解题报告
- BZOJ 4318 期望DP 解题报告
- bzoj 4318 期望DP 解题报告
- BZOJ 1003 DP+最短路 解题报告
- BZOJ 1084 [SCOI 2005] DP 解题报告
- 14001错误:由于应用程序配置不正确,应用程序未能启动:OD调试解决办法
- jQuery的deferred对象详解
- 如何把响应式网站的运营和优化推广做好呢?
- linux下定时执行php脚本
- java名词注释
- BZOJ 1833 数位DP 解题报告
- A
- MobLink网页跳转app指定界面技术简介之Universal Link
- 递归实现数N的二进制表示
- “师创杯”山东理工大学第九届ACM程序设计竞赛 正式赛 F.校赛~校赛~【思维+规律题】
- 关于mysql服务器3306端口不能远程连接的解决
- 利用SMTP发送验证验证
- 防止表单内回车自动提交
- Failed to load resource: net::ERR_CONNECTION_REFUSED