結果

問題 No.83 最大マッチング
ユーザー wraikny
提出日時 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
権限があれば一括ダウンロードができます

ソースコード

diff #
プレゼンテーションモードにする

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));
}
הההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההה
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
0