From 88277ed74a4cd842de3af3f1371e166d097dae65 Mon Sep 17 00:00:00 2001 From: Ariel Date: Sun, 7 Jan 2024 17:41:57 +0800 Subject: [PATCH] add number-dp --- dp/number.rs | 52 ++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 52 insertions(+) create mode 100644 dp/number.rs diff --git a/dp/number.rs b/dp/number.rs new file mode 100644 index 0000000..3dbe0d6 --- /dev/null +++ b/dp/number.rs @@ -0,0 +1,52 @@ +struct Sol { + dp: Vec, + pow: Vec, +} + +impl Sol { + fn solve(&self, mut x: usize) -> Vec { + let mut cnt = x; + let mut digit = vec![]; + let mut res = vec![0;10]; + let mut len = 0; + digit.push(0); + while x != 0 { + len += 1; + digit.push(x as usize % 10); + x /= 10; + } + for i in (1..=len).rev() { + cnt -= digit[i] * self.pow[i-1]; + res[digit[i]] += cnt + 1; + for b in 0..10 { + res[b] += self.dp[i-1] * digit[i]; + } + for j in 0..digit[i] { + res[j] += self.pow[i-1]; + } + res[0] -= self.pow[i-1]; + } + res + } +} + + +fn main() { + let mut buf = String::new(); + std::io::stdin().read_line(&mut buf).ok(); + let ab: Vec = buf.trim().split(' ').map(|x|x.parse::().unwrap()).collect::>(); + let a = ab[0]; + let b = ab[1]; + let mut dp = vec![0;13]; + let mut pow = vec![1;13]; + for i in 1..13 { + pow[i] = pow[i-1] * 10; + dp[i] = dp[i-1] * 10 + pow[i-1]; + } + let sol = Sol { dp, pow }; + let res_a_1 = sol.solve(a - 1); + let res_b = sol.solve(b); + for i in 0..10 { + print!("{} ", res_b[i] - res_a_1[i]); + } +}