結果
| 問題 |
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
}
}