結果
問題 | No.133 カードゲーム |
ユーザー |
![]() |
提出日時 | 2020-03-26 22:18:35 |
言語 | Rust (1.83.0 + proconio) |
結果 |
AC
|
実行時間 | 2 ms / 5,000 ms |
コード長 | 3,177 bytes |
コンパイル時間 | 11,021 ms |
コンパイル使用メモリ | 393,328 KB |
実行使用メモリ | 6,824 KB |
最終ジャッジ日時 | 2025-01-02 03:19:50 |
合計ジャッジ時間 | 12,324 ms |
ジャッジサーバーID (参考情報) |
judge3 / judge1 |
(要ログイン)
ファイルパターン | 結果 |
---|---|
sample | AC * 4 |
other | AC * 19 |
コンパイルメッセージ
warning: trait `IteratorExt` is never used --> src/main.rs:30:7 | 30 | trait IteratorExt: Iterator + Sized { | ^^^^^^^^^^^ | = note: `#[warn(dead_code)]` on by default
ソースコード
#![allow(unused_imports)]#![allow(non_snake_case)]use std::collections::HashMap;use std::collections::HashSet;#[allow(unused_macros)]macro_rules! read {([$t:ty] ; $n:expr) =>((0..$n).map(|_| read!([$t])).collect::<Vec<_>>());($($t:ty),+ ; $n:expr) =>((0..$n).map(|_| read!($($t),+)).collect::<Vec<_>>());([$t:ty]) =>(rl().split_whitespace().map(|w| w.parse().unwrap()).collect::<Vec<$t>>());($t:ty) =>(rl().parse::<$t>().unwrap());($($t:ty),*) => {{let buf = rl();let mut w = buf.split_whitespace();($(w.next().unwrap().parse::<$t>().unwrap()),*)}};}#[allow(dead_code)]fn rl() -> String {let mut buf = String::new();std::io::stdin().read_line(&mut buf).unwrap();buf.trim_end().to_owned()}trait IteratorExt: Iterator + Sized {fn vec(self) -> Vec<Self::Item> {self.collect()}}impl<T: Iterator> IteratorExt for T {}fn main() {let n = read!(isize);let a = read!([isize]);let b = read!([isize]);let rate = match n {1 => {if a[0] > b[0] { 1.0 }else { 0.0 }},2 => {let tmp = help2([[c(a[0], b[0]), c(a[1], b[0])],[c(a[0], b[1]), c(a[1], b[1])],]);tmp.iter().filter(|&&e| e > 0).count() as f64 / 2.0},3 => {let tmp = help3([[c(a[0], b[0]), c(a[1], b[0]), c(a[2], b[0])],[c(a[0], b[1]), c(a[1], b[1]), c(a[2], b[1])],[c(a[0], b[2]), c(a[1], b[2]), c(a[2], b[2])],]);tmp.iter().filter(|&&e| e > 0).count() as f64 / 6.0},4 => {let tmp = help4([[c(a[0], b[0]), c(a[1], b[0]), c(a[2], b[0]), c(a[3], b[0])],[c(a[0], b[1]), c(a[1], b[1]), c(a[2], b[1]), c(a[3], b[1])],[c(a[0], b[2]), c(a[1], b[2]), c(a[2], b[2]), c(a[3], b[2])],[c(a[0], b[3]), c(a[1], b[3]), c(a[2], b[3]), c(a[3], b[3])],]);tmp.iter().filter(|&&e| e > 0).count() as f64 / 24.0},_ => 0.0};println!("{}", rate);}fn c(a: isize, b: isize) -> isize {if a > b { 1 }else { -1 }}// 2x2 で何勝かfn help2(table: [[isize; 2]; 2]) -> Vec<isize> {let mut v = vec![];v.push(table[0][0] + table[1][1]);v.push(table[0][1] + table[1][0]);v}fn help3(t: [[isize; 3]; 3]) -> Vec<isize> {let mut v = vec![];for i in 0..=2 {let tmp = help2([[t[1][(i+1)%3], t[1][(i+2)%3]],[t[2][(i+1)%3], t[2][(i+2)%3]]]);for e in tmp.iter() {v.push(e + t[0][i]);}}v}fn help4(t: [[isize; 4]; 4]) -> Vec<isize> {let mut v = vec![];for i in 0..=3 {let tmp = help3([[t[1][(i+1)%4], t[1][(i+2)%4], t[1][(i+3)%4]],[t[2][(i+1)%4], t[2][(i+2)%4], t[2][(i+3)%4]],[t[3][(i+1)%4], t[3][(i+2)%4], t[3][(i+3)%4]],]);for e in tmp.iter() {v.push(e + t[0][i]);}}v}