LOADING

正在加载,请稍候

数位DP

2024/9/13

[ZJOI2010] 数字计数

题目描述

给定两个正整数 aabb,求在 [a,b][a,b] 中的所有整数里,每个数码 090\sim 9 分别出现了多少次。

输入格式

一行两个整数 a,ba,b

输出格式

一行十个整数,分别表示 090\sim 9[a,b][a,b] 中出现了多少次。

样例输入

1 99

样例输出

9 20 20 20 20 20 20 20 20 20

数据范围

  • 对于 30%30\% 的数据,保证 ab106a \le b \le 10^6
  • 对于 100%100\% 的数据,保证 1ab10121 \le a \le b \le 10^{12}

分析

dpidp_i 表示在不考虑前导零时,满 ii 位范围内某一种数码出现的次数。

对前 ii 位进行统计时,可以分两类讨论:

  1. 前导零合法时,090\sim 9 的数量相同,可以由 dpi1dp_{i-1} 递推得到。
  2. 前导零不合法时,需要单独处理最高位为 00 的情况。

这类题的核心是把 [1,n][1,n] 的统计函数写出来,再用答案 calc(b)calc(a1)calc(b)-calc(a-1) 得到区间结果。