题目链接

\(Description\)

求\([l,r]\)中\(0,1,\cdots,9\)每个数字出现的次数(十进制表示)。

\(Solution\)

对每位分别DP。注意考虑前导0: 在最后统计时,把0的答案减掉对应位的即可,在第\(i\)位的前导0会产生额外的\(10^{i-1}\)个答案。

#include <cstdio>
#include <cstring>
#include <algorithm> int Ans[10],A[10],f[10][10],pw[10];
bool vis[10][10]; int DFS(int pos,int cnt,bool lim,int K)
{
if(!pos) return cnt;
if(!lim && vis[pos][cnt]) return f[pos][cnt];
int up=lim?A[pos]:9, res=0;
for(int i=0; i<=up; ++i)
res+=DFS(pos-1,cnt+(i==K),i==up&&lim,K);
if(!lim) vis[pos][cnt]=1,f[pos][cnt]=res;
return res;
} int main()
{
pw[0]=1;
for(int i=1; i<=8; ++i) pw[i]=pw[i-1]*10;
int l,r;
while(scanf("%d%d",&l,&r),l&&r)
{
if(l>r) std::swap(l,r);
for(A[0]=0; r; r/=10) A[++A[0]]=r%10;
for(int i=0; i<=9; ++i)//每个数答案都是不同的。。别忘清空。
memset(vis,0,sizeof vis), Ans[i]=DFS(A[0],0,1,i);
int bit=A[0]; for(A[0]=0,--l; l; l/=10) A[++A[0]]=l%10;
for(int i=0; i<=9; ++i)
memset(vis,0,sizeof vis), Ans[i]-=DFS(A[0],0,1,i);
while(bit!=A[0]) Ans[0]-=pw[--bit];
for(int i=0; i<9; ++i) printf("%d ",Ans[i]);
printf("%d\n",Ans[9]);
}
return 0;
}

数字计数:

//824kb	52ms
//被longlong坑。。
#include <cstdio>
#include <cstring>
#include <algorithm>
typedef long long LL; LL Ans[13],A[13],f[13][13],pw[13];
bool vis[13][13]; LL DFS(int pos,LL cnt,bool lim,int K)
{
if(!pos) return cnt;
if(!lim && vis[pos][cnt]) return f[pos][cnt];
int up=lim?A[pos]:9; LL res=0;
for(int i=0; i<=up; ++i)
res+=DFS(pos-1,cnt+(i==K),i==up&&lim,K);
if(!lim) vis[pos][cnt]=1,f[pos][cnt]=res;
return res;
} int main()
{
pw[0]=1;
for(int i=1; i<=12; ++i) pw[i]=pw[i-1]*10ll;
LL l,r;
scanf("%lld%lld",&l,&r);
if(l>r) std::swap(l,r);
for(A[0]=0; r; r/=10) A[++A[0]]=r%10;
for(int i=0; i<=9; ++i)//每个数答案都是不同的。。别忘清空。
memset(vis,0,sizeof vis), Ans[i]=DFS(A[0],0,1,i);
int bit=A[0]; for(A[0]=0,--l; l; l/=10) A[++A[0]]=l%10;
for(int i=0; i<=9; ++i)
memset(vis,0,sizeof vis), Ans[i]-=DFS(A[0],0,1,i);
while(bit!=A[0]) Ans[0]-=pw[--bit];
for(int i=0; i<9; ++i) printf("%lld ",Ans[i]);
printf("%lld",Ans[9]); return 0;
}

最新文章

  1. Python Day11
  2. gradle类重复的问题解决方法
  3. [Java拾遗二]Tomact及Http 部分总结.
  4. [转]ionic项目之上传下载数据
  5. WCF+EntityFramework+mysql总结
  6. unity UGUI动态字体显示模糊
  7. java和.net 处理任意格式日期字符串转日期类型,
  8. ios7上隐藏status bar
  9. MVC + Vue.js 初体验(实现表单操作)
  10. 如果服务器不能把编码格式改成UTF8怎么办?(20161113)
  11. Slf4j+Log4j日志框架入门
  12. VME总线
  13. 随机ID添加
  14. java返回数据工具类
  15. jQuery实现单击某个标签改变样式
  16. 调整iframe滚动条失效
  17. 一致性hash理解、拜占庭将军问题解读和CAP理论总结
  18. MariaDB 数据库
  19. Structs复习 访问web元素
  20. C#委托+回调详解

热门文章

  1. angularJs的各种服务和指令的使用场景
  2. J2EE简介
  3. 关于System.getProperty(&quot;java.io.tmpdir&quot;);的输出,及System.getProperty();参数
  4. 第10月第13天 xcode ipa
  5. c语言.函数指针数组
  6. bellman-ford算法(判断有没有负环)
  7. mysql high availability 概述
  8. nor flash 和 nand flash
  9. iOS 中 h5 页面 iframe 调用高度自扩展问题及解决
  10. Coursera台大机器学习技法课程笔记12-Neural Network