結果
| 問題 | No.3178 free sort |
| コンテスト | |
| ユーザー |
|
| 提出日時 | 2026-01-10 23:08:34 |
| 言語 | Rust (1.92.0 + proconio + num) |
| 結果 |
WA
|
| 実行時間 | - |
| コード長 | 1,465 bytes |
| 記録 | |
| コンパイル時間 | 26,087 ms |
| コンパイル使用メモリ | 412,116 KB |
| 実行使用メモリ | 9,472 KB |
| 最終ジャッジ日時 | 2026-01-10 23:09:03 |
| 合計ジャッジ時間 | 29,290 ms |
|
ジャッジサーバーID (参考情報) |
judge5 / judge2 |
(要ログイン)
| ファイルパターン | 結果 |
|---|---|
| sample | AC * 3 WA * 2 |
| other | WA * 40 |
コンパイルメッセージ
warning: value assigned to `x` is never read --> src/main.rs:35:25 | 35 | let mut x = 0; | ^ | = help: maybe it is overwritten before being read? = note: `#[warn(unused_assignments)]` (part of `#[warn(unused)]`) on by default warning: variable `M` should have a snake case name --> src/main.rs:4:9 | 4 | let M = 998244353; | ^ help: convert the identifier to snake case: `m` | = note: `#[warn(non_snake_case)]` (part of `#[warn(nonstandard_style)]`) on by default
ソースコード
use proconio::{input, marker::Chars};
use std::collections::HashMap;
fn main() {
let M = 998244353;
input! {
n: Chars,
}
/*
let s: Vec<i128> = n
.chars()
.map(|c| c.to_digit(10).unwrap() as i128)
.collect();
*/
let mut s: Vec<i128> = vec![];
for x in &n {
s.push(x.to_digit(10).unwrap() as i128);
}
let mut count: HashMap<i128, i128> = HashMap::new();
for x in &s {
*count.entry(*x).or_insert(0) += 1;
}
let mut f: Vec<i128> = vec![1];
for i in 1..=n.len() {
f.push((f[f.len() - 1] * i as i128) % M);
}
let mut cnt = 0_i128;
for i in 1..10 {
let v = count.get(&i).unwrap_or(&0);
if *v <= 0 {
//if count_p <= 0 {
continue;
}
let mut d = f[n.len() - 1];
for j in 0..10 {
let mut x = 0;
if i == j {
let v = count.get(&i).unwrap_or(&0);
x = *v - 1;
} else {
let v = count.get(&j).unwrap_or(&0);
x = *v;
}
d = d * modpow(f[x as usize], -1, M);
d %= M
}
cnt += d;
cnt %= M;
}
println!("{cnt}");
}
fn modpow(mut a: i128, mut e: i128, m: i128) -> i128 {
let mut r = 1;
a %= m;
while e > 0 {
if e & 1 == 1 {
r = (r * a) % m;
}
a = (a * a) % m;
e >>= 1;
}
r
}