P2602 [ZJOI2010]数字计数

思路:

首先考虑含有前导0的情况,可以发现在相同的\(i\)位数中,每个数的出现次数都是相等的。所以我们可以设\(f(i)\)为\(i\)位数每个数的出现次数。

那么就有递推方程:\(f(i)=f(i-1)*10+10^{i-1}\)。

假设现在要求的数为\(x\)位,那么我们依次从\(x\)位往下面求就行了。假设第\(x\)位的数字为\(k\),那么我们枚举第一位从\(0\)到\(k\),每一个数字的出现次数加上\(f(i-1)*k+10^{i-1}\),同时\(k\)这个数还会有多出现的情况,计算一下就行了。就这样一位一位来算就ok了。

因为我们之前没有考虑前导0的情况,所以我们减去多算上的情况就行了。

代码如下:

#include <bits/stdc++.h>
using namespace std;
typedef long long ll;
const int N = 15;
ll f[N], cnta[N], cntb[N], pow10[N];
ll a, b;
int tot;
ll num[N] ;
void solve(ll x, ll *cnt) {
tot = 0;
ll tmp = x;
while(x) {
num[++tot] = x % 10;
x /= 10;
}
for(int i = tot; i >= 1; i--) {
for(int j = 0; j < 10; j++) cnt[j] += num[i] * f[i - 1] ;
for(int j = 0; j < num[i]; j++) cnt[j] += pow10[i - 1] ;
tmp -= num[i] * pow10[i - 1] ;
cnt[num[i]] += tmp + 1;
cnt[0] -= pow10[i - 1] ;
}
}
int main() {
pow10[0] = 1;
ll t = 0;
for(int i = 1; i < N; i++) {
f[i] = f[i - 1] * 10 + pow10[i - 1] ;
pow10[i] = pow10[i - 1] * 10;
}
cin >> a >> b;
solve(a - 1, cnta) ;
solve(b, cntb) ;
for(int i = 0; i < 10; i++) cout << cntb[i] - cnta[i] << ' ';
return 0;
}

最新文章

  1. 网友转发的很全的 LISTCTL 控件使用的说明
  2. js中的preventDefault与stopPropagation详解
  3. 如何使用MASM来编译、连接、调试汇编语言
  4. asp.net 柱形图
  5. JQ插件jquery.fn.extend与jquery.extend
  6. centos7编译安装nginx1.8
  7. 什么是Mocking framework?它有什么用?
  8. css制作最简单导航栏
  9. windows 监控
  10. vue(2)—— vue简单语法运用,常用指令集
  11. 每日一练之贪心算法(P2587)
  12. (set stringstream)单词数 hdu2072
  13. 解决Pycharm更新package出现的问题:AttributeError:module &#39;pip&#39; has no attribute &#39;main&#39;
  14. 第二次作业-git的基本操作
  15. 用ActiveX 创建自己的comboBox 控件(一)
  16. 往github提交代码流程
  17. MySQL数据库-外键链表之一对多,多对多
  18. C# 使用post的方式提交raw格式的数据,数据为json格式,多层嵌套
  19. swiper4-vue 不使用loop,由最后一张跳到第一张
  20. Web服务器缓存

热门文章

  1. Centos7时区修改方法汇总
  2. WIN10设置notepad++默认打开txt文件
  3. [ARM-Linux开发]linux dmesg命令参数及用法详解(linux显示开机信息命令)
  4. linux 把nginx加入到系统服务的方法
  5. Referenced file contains errors (http://www.springframework.org/...解决
  6. 在有nginx做反向代理时候,如何获取用户真实Ip信息
  7. vue脚手架(vue-cli)老版本(2.xx版)的使用
  8. KepServerEX读写三菱PLC,车间现场测试记录,带你了解【数据采集的困境】的前世与今生
  9. head 与 tail
  10. 解决SqlDataSource连接超时的问题