結果
| 問題 |
No.3204 Permuted Integer
|
| コンテスト | |
| ユーザー |
|
| 提出日時 | 2025-07-18 22:07:31 |
| 言語 | Rust (1.83.0 + proconio) |
| 結果 |
AC
|
| 実行時間 | 242 ms / 2,000 ms |
| コード長 | 1,241 bytes |
| コンパイル時間 | 12,596 ms |
| コンパイル使用メモリ | 393,692 KB |
| 実行使用メモリ | 7,716 KB |
| 最終ジャッジ日時 | 2025-07-18 23:39:40 |
| 合計ジャッジ時間 | 17,141 ms |
|
ジャッジサーバーID (参考情報) |
judge4 / judge3 |
(要ログイン)
| ファイルパターン | 結果 |
|---|---|
| sample | AC * 1 |
| other | AC * 26 |
ソースコード
use std::collections::BTreeMap;
use proconio::input;
const MAX: usize = 10_usize.pow(9);
fn main() {
input! {
t: usize,
nn: [usize; t],
}
let mut square_numbers_per_num_zeros = vec![BTreeMap::new(); 10];
for i in 0_usize.. {
let i2 = i.pow(2);
if i2 > MAX {
break;
}
let (num_zeros, sorted_chars) = parse(i2);
let square_numbers = &mut square_numbers_per_num_zeros[num_zeros];
if !square_numbers.contains_key(&sorted_chars) {
square_numbers.insert(sorted_chars, i2);
}
}
for &n in &nn {
let (num_zeros, sorted_chars) = parse(n);
let square_number = square_numbers_per_num_zeros[..=num_zeros]
.iter()
.filter_map(|square_numbers| square_numbers.get(&sorted_chars))
.min();
match square_number {
Some(value) => println!("{}", value),
None => println!("-1"),
}
}
}
fn parse(n: usize) -> (usize, String) {
let mut chars: Vec<_> = n.to_string().chars().collect();
chars.sort_unstable();
let num_zeros = chars.iter().take_while(|&&ch| ch == '0').count();
(num_zeros, chars[num_zeros..].iter().collect())
}