結果
| 問題 | No.246 質問と回答 |
| コンテスト | |
| ユーザー |
tubo28
|
| 提出日時 | 2017-01-02 11:35:19 |
| 言語 | Rust (1.83.0 + proconio) |
| 結果 |
AC
|
| 実行時間 | 51 ms / 2,000 ms |
| コード長 | 2,642 bytes |
| 記録 | |
| コンパイル時間 | 11,671 ms |
| コンパイル使用メモリ | 384,968 KB |
| 実行使用メモリ | 25,288 KB |
| 平均クエリ数 | 30.90 |
| 最終ジャッジ日時 | 2024-07-16 20:09:03 |
| 合計ジャッジ時間 | 14,889 ms |
|
ジャッジサーバーID (参考情報) |
judge3 / judge5 |
(要ログイン)
| ファイルパターン | 結果 |
|---|---|
| other | AC * 30 |
ソースコード
fn main(){
let mut sc = Scanner::new();
let mut left = 0; // le
let mut right = 1_000_000_010;
while left + 1 < right {
let mid = (left + right) / 2;
println!("? {}", mid);
// use std::io::Write;
// std::io::stdout().flush().unwrap();
if sc.next::<i32>() == 1 {
left = mid;
} else {
right = mid;
}
}
println!("! {}", left);
use std::io::Write;
std::io::stdout().flush().unwrap();
}
#[allow(dead_code)]
struct Scanner {
buf: Vec<u8>, idx: usize, next: String,
}
#[allow(dead_code)]
impl Scanner {
fn new() -> Scanner {
Scanner { buf: vec![], idx: 0, next: String::new() }
}
fn next<T: std::str::FromStr>(&mut self) -> T {
self.wrapped::<T>().unwrap()
}
fn vec<T: std::str::FromStr>(&mut self, n: usize) -> Vec<T> {
let mut res = Vec::<T>::with_capacity(n);
for _ in 0..n { res.push(self.next()) }
res
}
fn wrapped<T: std::str::FromStr>(&mut self) -> Option<T> {
if !self.read() {
None
} else {
let res = self.next.parse::<T>().ok();
self.next.clear();
res
}
}
fn read(&mut self) -> bool {
if !self.next.is_empty() {
true
} else {
self.next.clear();
loop {
match self.get_char() {
Some(c) if !c.is_whitespace() => {
self.next.push(c);
break;
},
Some(_) => continue,
None => return false,
}
}
loop {
match self.get_char() {
Some(c) if !c.is_whitespace() => self.next.push(c),
_ => return true,
}
}
}
}
fn get_char(&mut self) -> Option<char> {
if self.idx >= self.buf.len() {
self.fill_buf();
if self.idx >= self.buf.len() { return None }
}
self.idx += 1;
Some(self.buf[self.idx - 1] as char)
}
fn fill_buf(&mut self){
use std::io::BufRead;
let reader = std::io::stdin();
let mut buffer = reader.lock();
let len = match buffer.fill_buf() {
Ok(bytes) => {
self.buf.resize(bytes.len(), b'\0');
self.buf.copy_from_slice(bytes);
bytes.len() as i32
},
Err(_) => -1,
};
self.idx = 0;
if len >= 0 { buffer.consume(len as usize); }
}
}
tubo28