20250412 finished.
This commit is contained in:
parent
25148752ea
commit
60a946e6d7
|
@ -593,3 +593,5 @@ mod p2999_count_the_number_of_powerful_integers;
|
||||||
mod p3375_minimum_operations_to_make_array_values_equal_to_k;
|
mod p3375_minimum_operations_to_make_array_values_equal_to_k;
|
||||||
|
|
||||||
mod p2843_count_symmetric_integers;
|
mod p2843_count_symmetric_integers;
|
||||||
|
|
||||||
|
mod p3272_find_the_count_of_good_integers;
|
||||||
|
|
81
src/problem/p3272_find_the_count_of_good_integers.rs
Normal file
81
src/problem/p3272_find_the_count_of_good_integers.rs
Normal file
|
@ -0,0 +1,81 @@
|
||||||
|
/**
|
||||||
|
* [3272] Find the Count of Good Integers
|
||||||
|
*/
|
||||||
|
pub struct Solution {}
|
||||||
|
|
||||||
|
// submission codes start here
|
||||||
|
use std::collections::HashSet;
|
||||||
|
|
||||||
|
impl Solution {
|
||||||
|
pub fn count_good_integers(n: i32, k: i32) -> i64 {
|
||||||
|
let n = n as usize;
|
||||||
|
let k = k as i64;
|
||||||
|
let base_value = 10i64.pow((n as u32 - 1) / 2);
|
||||||
|
let length = (n + 1) / 2;
|
||||||
|
let mut dict = HashSet::new();
|
||||||
|
|
||||||
|
// 枚举n个数位的回文数
|
||||||
|
for mut i in base_value..base_value * 10 {
|
||||||
|
let mut s = Vec::with_capacity(length);
|
||||||
|
|
||||||
|
while i != 0 {
|
||||||
|
s.push(i % 10);
|
||||||
|
i = i / 10;
|
||||||
|
}
|
||||||
|
|
||||||
|
// 这里拼接回文字符串有点困难
|
||||||
|
// 因为上面存数字字符存的是倒序
|
||||||
|
// 即 123 -> 3 2 1
|
||||||
|
// 所以 12321 -> 1 2 3 2 1
|
||||||
|
let mut real_str: Vec<i64> = s
|
||||||
|
.iter()
|
||||||
|
.rev()
|
||||||
|
.chain(s.iter().skip(n & 1))
|
||||||
|
.map(|x| *x)
|
||||||
|
.collect();
|
||||||
|
|
||||||
|
let number = real_str.iter().fold(0, |v, i| v * 10 + *i);
|
||||||
|
if number % k == 0 {
|
||||||
|
real_str.sort_unstable();
|
||||||
|
dict.insert(real_str);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
let mut factorial = Vec::with_capacity(n + 1);
|
||||||
|
factorial.push(1);
|
||||||
|
for i in 1..=n {
|
||||||
|
factorial.push(factorial[i - 1] * i as i64);
|
||||||
|
}
|
||||||
|
|
||||||
|
let mut result = 0;
|
||||||
|
|
||||||
|
for str in dict.into_iter() {
|
||||||
|
let mut counts = [0; 10];
|
||||||
|
for i in str {
|
||||||
|
counts[i as usize] += 1;
|
||||||
|
}
|
||||||
|
|
||||||
|
let mut total = (n - counts[0]) as i64 * factorial[n - 1];
|
||||||
|
for x in counts {
|
||||||
|
total /= factorial[x]
|
||||||
|
}
|
||||||
|
result += total;
|
||||||
|
}
|
||||||
|
|
||||||
|
result
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// submission codes end
|
||||||
|
|
||||||
|
#[cfg(test)]
|
||||||
|
mod tests {
|
||||||
|
use super::*;
|
||||||
|
|
||||||
|
#[test]
|
||||||
|
fn test_3272() {
|
||||||
|
assert_eq!(27, Solution::count_good_integers(3, 5));
|
||||||
|
assert_eq!(2, Solution::count_good_integers(1, 4));
|
||||||
|
assert_eq!(2468, Solution::count_good_integers(5, 6));
|
||||||
|
}
|
||||||
|
}
|
Loading…
Reference in New Issue
Block a user