結果

問題 No.702 中央値を求めよ LIMITED
ユーザー frozenlib
提出日時 2018-06-16 00:39:01
言語 Rust
(1.83.0 + proconio)
結果
AC  
実行時間 462 ms / 5,000 ms
コード長 1,936 bytes
コンパイル時間 16,385 ms
コンパイル使用メモリ 389,792 KB
実行使用メモリ 6,820 KB
最終ジャッジ日時 2025-01-02 14:54:59
合計ジャッジ時間 29,217 ms
ジャッジサーバーID
(参考情報)
judge2 / judge1
このコードへのチャレンジ
(要ログイン)
ファイルパターン 結果
sample AC * 2
other AC * 25
権限があれば一括ダウンロードができます

ソースコード

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

use std::io::*;
use std::str::FromStr;
use utils::*;
pub fn main() {
let i = stdin();
let mut o = Vec::new();
run(i.lock(), &mut o);
stdout().write_all(&o).unwrap();
}
fn run<R: BufRead, W: Write>(i: R, o: &mut W) {
let mut i = CpReader::new(i);
let seed = i.read::<u32>();
writeln!(o, "{}", solve(seed)).unwrap();
}
struct Gen {
x: u32,
y: u32,
z: u32,
w: u32,
}
impl Gen {
fn new(seed: u32) -> Self {
Gen {
x: seed,
y: 1,
z: 2,
w: 3,
}
}
fn next(&mut self) -> u32 {
let t = self.x ^ (self.x << 11);
self.x = self.y;
self.y = self.z;
self.z = self.w;
self.w = (self.w ^ (self.w >> 19)) ^ (t ^ (t >> 8));
return self.w;
}
}
fn solve(seed: u32) -> u32 {
fn is_over_mid(seed: u32, mid: u32) -> bool {
let mut c = 0;
let mut g = Gen::new(seed);
for _ in 0..10000001 {
let n = g.next();
if n <= mid {
c += 1;
}
}
c >= 5000001
}
let mut low = 0;
let mut high = u32::max_value();
while low < high {
let mid = ((low as u64 + high as u64) / 2) as u32;
if is_over_mid(seed, mid) {
high = mid;
} else {
low = mid + 1;
}
}
low
}
mod utils {
use super::*;
pub struct CpReader<R: BufRead> {
r: R,
s: String,
}
impl<R: BufRead> CpReader<R> {
pub fn new(r: R) -> Self {
CpReader {
r: r,
s: String::new(),
}
}
pub fn read_line(&mut self) -> &str {
self.s.clear();
self.r.read_line(&mut self.s).unwrap();
self.s.trim()
}
pub fn read<T: FromStr>(&mut self) -> T {
self.read_line().parse().ok().unwrap()
}
}
}
הההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההה
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
0