結果

問題 No.3204 Permuted Integer
ユーザー atcoder8
提出日時 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
権限があれば一括ダウンロードができます

ソースコード

diff #

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())
}
0