結果
| 問題 | No.133 カードゲーム | 
| コンテスト | |
| ユーザー |  | 
| 提出日時 | 2024-08-01 10:53:01 | 
| 言語 | Rust (1.83.0 + proconio) | 
| 結果 | 
                                AC
                                 
                             | 
| 実行時間 | 789 ms / 5,000 ms | 
| コード長 | 1,771 bytes | 
| コンパイル時間 | 11,749 ms | 
| コンパイル使用メモリ | 397,408 KB | 
| 実行使用メモリ | 6,944 KB | 
| 最終ジャッジ日時 | 2024-08-01 10:53:32 | 
| 合計ジャッジ時間 | 28,678 ms | 
| ジャッジサーバーID (参考情報) | judge2 / judge1 | 
(要ログイン)
| ファイルパターン | 結果 | 
|---|---|
| sample | AC * 4 | 
| other | AC * 19 | 
コンパイルメッセージ
warning: unused imports: `BTreeSet`, `HashMap`, `hash::Hash`
 --> src/main.rs:2:19
  |
2 |     collections::{BTreeSet, HashMap},
  |                   ^^^^^^^^  ^^^^^^^
3 |     hash::Hash,
  |     ^^^^^^^^^^
  |
  = note: `#[warn(unused_imports)]` on by default
            
            ソースコード
use std::{
    collections::{BTreeSet, HashMap},
    hash::Hash,
};
fn main() {
    proconio::input! {
        n: usize,
        mut a: [u32; n],
        mut b: [u32; n],
    }
    let mut rng = Xorshift::new();
    let mut win = 0;
    for _ in 0..10000000 {
        shuffle(&mut a, &mut rng);
        shuffle(&mut b, &mut rng);
        let mut w = 0;
        for i in 0..n {
            if a[i] > b[i] {
                w += 1;
            }
        }
        if w > n / 2 {
            win += 1
        }
    }
    println!("{}", win as f64 / 10000000.);
}
fn shuffle<T>(x: &mut [T], rng: &mut Xorshift) {
    for i in 0..x.len() {
        let j = rng.rand(x.len() as u64) as usize;
        x.swap(i, j);
    }
}
#[derive(Debug)]
#[allow(dead_code)]
pub struct Xorshift {
    seed: u64,
}
impl Xorshift {
    #[allow(dead_code)]
    pub fn new() -> Xorshift {
        Xorshift {
            seed: 0xf0fb588ca2196dac,
        }
    }
    #[allow(dead_code)]
    pub fn with_seed(seed: u64) -> Xorshift {
        Xorshift { seed: seed }
    }
    #[inline]
    #[allow(dead_code)]
    pub fn next(&mut self) -> u64 {
        self.seed = self.seed ^ (self.seed << 13);
        self.seed = self.seed ^ (self.seed >> 7);
        self.seed = self.seed ^ (self.seed << 17);
        self.seed
    }
    #[inline]
    #[allow(dead_code)]
    pub fn rand(&mut self, m: u64) -> u64 {
        self.next() % m
    }
    #[inline]
    #[allow(dead_code)]
    // 0.0 ~ 1.0
    pub fn randf(&mut self) -> f64 {
        use std::mem;
        const UPPER_MASK: u64 = 0x3FF0000000000000;
        const LOWER_MASK: u64 = 0xFFFFFFFFFFFFF;
        let tmp = UPPER_MASK | (self.next() & LOWER_MASK);
        let result: f64 = unsafe { mem::transmute(tmp) };
        result - 1.0
    }
}
            
            
            
        