結果
問題 | No.83 最大マッチング |
ユーザー |
|
提出日時 | 2018-05-25 14:08:01 |
言語 | Rust (1.83.0 + proconio) |
結果 |
WA
|
実行時間 | - |
コード長 | 1,511 bytes |
コンパイル時間 | 21,619 ms |
コンパイル使用メモリ | 378,116 KB |
実行使用メモリ | 5,376 KB |
最終ジャッジ日時 | 2024-06-28 17:57:18 |
合計ジャッジ時間 | 15,897 ms |
ジャッジサーバーID (参考情報) |
judge2 / judge1 |
(要ログイン)
ファイルパターン | 結果 |
---|---|
sample | AC * 3 |
other | AC * 6 WA * 4 |
ソースコード
use std::io;enum Num {One,Four,Five,Seven,Nine,}impl Num {fn value(&self) -> u32 {match self {Num::One => 1,Num::Four => 4,Num::Five => 5,Num::Seven => 7,Num::Nine => 9,}}fn matches(&self) -> u32 {match self {Num::One => 2,Num::Four => 4,Num::Five => 5,Num::Seven => 3,Num::Nine => 6,}}}fn max_num(n : u32) -> Num {match n {5 => Num::Five,4 => Num::Four,3 => Num::Seven,2 => Num::One,_ => Num::Nine,}}fn calc_digit(n : u32) -> u32 {n / Num::One.matches()}fn calc_result(r : &Vec<u32>) -> u64 {r.iter().rev().enumerate().fold(0, |s, (i, j)| s + 10i64.pow(i as u32) as u64 * (*j as u64))}fn main() {let mut input = String::new();io::stdin().read_line(&mut input).unwrap();let mut n : u32 = input.trim().parse().unwrap();let digits = calc_digit(n);let result : Vec<u32> = (1..=digits).map(|_| Num::One.value()).collect();n = n - digits * Num::One.matches();let result = result.iter().map(|x| {if n != 0 {let match_num = n + Num::One.matches();let num = max_num(match_num);n = match_num - num.matches();num.value()} else {*x}}).collect();println!("{}", calc_result(&result));}