contests/arc128/arc128_a.rs (87 lines of code) (raw):

#![allow(non_snake_case)] use indexmap::IndexMap; use proconio::input; use std::collections::HashMap; use std::iter::Map; fn main() { input! { N: u64, A: [u64; N] } let mut gold: u64 = 1; let mut silver: u64 = 0; let mut rank = vec![]; let mut max_local_rank_gold = vec![]; let mut max_local_rank_silver = vec![]; for i in -1..(N as i64) { let mut local_ranks = vec![]; let mut max_gold = HashMap::new(); max_gold.insert("number", 0.); max_gold.insert("index", 0.); let mut max_silver = HashMap::new(); max_silver.insert("number", 0.); max_silver.insert("index", 0.); for j in (i + 1) as u64..N { let mut local_rank = [0., 0.]; // 金の評価 if i == -1 { // 初日は銀に交換することしかできないため、金の評価は0とする local_rank[0] = 0.; } else { local_rank[0] = A[i as usize] as f64 / A[j as usize] as f64; } // 銀の評価 if j == N - 1 { // 最終日は金に交換することしかできないため、銀の評価は0とする local_rank[1] = 0.; } else { if i == -1 { local_rank[1] = 1. * A[j as usize] as f64; } else { local_rank[1] = A[i as usize] as f64 * A[j as usize] as f64; } } if max_gold["number"] < local_rank[0] { max_gold.insert("number", local_rank[0]); max_gold.insert("index", j as f64); } if max_silver["number"] < local_rank[1] { max_silver.insert("number", local_rank[1]); max_silver.insert("index", j as f64); } local_ranks.push(local_rank); } max_local_rank_gold.push(max_gold); max_local_rank_silver.push(max_silver); rank.push(local_ranks); } let mut x = vec![]; let mut next_index: u64 = max_local_rank_silver[0]["index"] as u64; let mut old_index: u64 = 0; for i in 0..N { if i < next_index { x.push(0); continue; } if gold != 0 { // 金を持っている場合 if max_local_rank_silver[old_index as usize]["index"] as u64 == next_index { silver = gold * A[i as usize]; gold = 0; next_index = max_local_rank_gold[i as usize + 1]["index"] as u64; old_index = i + 1; x.push(1); continue; } } else { if max_local_rank_gold[old_index as usize]["index"] as u64 == next_index { gold = silver / A[i as usize]; silver = 0; next_index = max_local_rank_silver[i as usize + 1]["index"] as u64; old_index = i + 1; x.push(1); continue; } } x.push(0); } for answer in x { print!("{} ", answer) } println!(); } // https://atcoder.jp/contests/arc128/tasks/arc128_a // 未完 // 参考: https://atcoder.jp/contests/arc128/submissions/26599196