LOADING

正在加载,请稍候

数位DP

2024/9/13

[ZJOI2010] 数字计数

题目描述

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

输入格式

一行两个整数 a,ba,b。

输出格式

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

样例输入

1 99

样例输出

9 20 20 20 20 20 20 20 20 20

数据范围

  • 对于 30%30\% 的数据,保证 a≤b≤106a \le b \le 10^6。
  • 对于 100%100\% 的数据,保证 1≤a≤b≤10121 \le a \le b \le 10^{12}。

分析

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

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

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

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