AtCoder Regular Contest 078

Submission #1430642

Source codeソースコード

use std::io;
use std::io::prelude::*;

fn ask(n: String) -> bool {
    let mut stdout = io::stdout();
    stdout.write(format!("? {}\n", n).as_bytes());
    stdout.flush();
    let mut stdin = io::stdin();
    let mut input = String::new();
    stdin.read_line(&mut input);
    input.starts_with("Y")
}

fn is_last(s: &str) -> bool {
    if s.starts_with("1") || (s.len() == 0 && ask("1000000000000".to_string())) {
        let mut t = String::new();
        for _ in 0..s.len()+1 {
            t += "9";
        }
        ask(t)
    } else {
        let mut t = String::new();
        t += "1";
        for _ in 0..s.len()+1 {
            t += "0";
        }
        !ask(t)
    }
}
fn find_last(s: &str) -> i32 {
    let mut lb = if s.len() == 0 { 1 } else { 0 } - 1;
    let mut ub = 9;
    while ub - lb > 1 {
        let x = (lb + ub) / 2;
        if ask(s.to_string() + &x.to_string() + "0") {
            ub = x;
        } else {
            lb = x;
        }
    }
    ub
}
fn find_char(s: &str) -> (i32, bool) {
    let mut lb = 0;
    let mut ub = 10;
    // [lb, ub)
    while ub - lb > 1 {
        let x = (lb + ub) / 2;
        if ask(s.to_string() + &x.to_string()) {
            lb = x;
        } else {
            ub = x;
        }
    }
    if lb != 9 {
        (lb, false)
    } else if is_last(s) {
        (find_last(s), true)
    } else {
        (9, false)
    }
}
fn main() {
    let mut ans = String::new();
    loop {
        let (a, b) = find_char(&ans);
        ans += &a.to_string();
        if b {
            break;
        }
    }

    let mut stdout = io::stdout();
    stdout.write(format!("! {}\n", ans).as_bytes());
    stdout.flush();
}

// --- template ---
#[allow(unused_imports)]
use std::cmp::{max, min};
#[allow(unused_imports)]
use std::collections::HashSet;

pub trait FromLn {
    fn fromln(s: &str) -> Self;
}
pub fn readln<T: FromLn>() -> T {
    let mut buf = String::new();
    let _ = ::std::io::stdin().read_line(&mut buf).unwrap();
    T::fromln(buf.trim())
}
pub fn readlns<T: FromLn>(n: usize) -> Vec<T> {
    let mut vs = vec![];
    for _ in 0..n { vs.push(readln()); }
    vs
}
macro_rules! fromln_primitives {
    ($($t:ty),*) => { $(
        impl FromLn for $t {
            fn fromln(s: &str) -> $t {
                s.parse().unwrap()
            }
        }
    )* }
}
fromln_primitives!(String, bool, f32, f64, isize, i8, i16, i32, i64, usize, u8, u16, u32, u64);
impl<T> FromLn for Vec<T> where T: FromLn {
    fn fromln(s: &str) -> Vec<T> {
        s.split_whitespace().map(T::fromln).collect()
    }
}
impl FromLn for Vec<char> {
    fn fromln(s: &str) -> Vec<char> {
        s.chars().collect()
    }
}
macro_rules! fromln_tuple {
    ($($t:ident),*) => {
        impl<$($t),*> FromLn for ($($t),*) where $($t: FromLn),* {
            fn fromln(s: &str) -> ($($t),*) {
                let mut it = s.split_whitespace();
                let t = ($($t::fromln(it.next().unwrap())),*);
                assert_eq!(it.next(), None);
                t
            }
        }
    }
}
fromln_tuple!(A, B);
fromln_tuple!(A, B, C);
fromln_tuple!(A, B, C, D);
fromln_tuple!(A, B, C, D, E);
fromln_tuple!(A, B, C, D, E, F);

Submission

Task問題 E - Awkward Response
User nameユーザ名 くコ:彡
Created time投稿日時
Language言語 Rust (1.15.1)
Status状態 AC
Score得点 800
Source lengthソースコード長 3311 Byte
File nameファイル名
Exec time実行時間 5 ms
Memory usageメモリ使用量 4692 KB

Compiler messageコンパイルメッセージ

warning: unused result which must be used, #[warn(unused_must_use)] on by default
--> ./Main.rs:6:5
|
6 | stdout.write(format!("? {}\n", n).as_bytes());
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^

warning: unused result which must be used, #[warn(unused_must_use)] on by default
--> ./Main.rs:7:5
|
7 | stdout.flush();
| ^^^^^^^^^^^^^^^

warning: variable does not need to be mutable, #[warn(unused_mut)] on by default
--> ./Main.rs:8:9
|
8 | let mut stdin = io::stdin();
| ^^^^^^^^^

warning: unused result which must be used, #[warn(unused_must_use)] on by default
--> ./Main.rs:10:5
|
10 | stdin.read_line(&mut input);
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^^

warning: unused result which must be used, #[warn(unused_must_use)] on by default
--> ./Main.rs:74:5
|
74 | stdout.write(format!("! {}\n", ans).as_bytes());
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^

warning: unused result which must be used, #[warn(unused_must_use)] on by d...

Test case

Set

Set name Score得点 / Max score Cases
Sample - 00_example_01.txt
All 800 / 800 00_example_01.txt,01.txt,02.txt,03.txt,04.txt,05.txt,06.txt,07.txt,08.txt,09.txt,10.txt,11.txt,12.txt,13.txt,14.txt,15.txt,16.txt,17.txt,18.txt,19.txt,20.txt,21.txt,22.txt,23.txt,24.txt,25.txt,26.txt,27.txt,28.txt,29.txt,30.txt,31.txt,32.txt,33.txt,34.txt,35.txt,36.txt,37.txt,38.txt,39.txt

Test case

Case name Status状態 Exec time実行時間 Memory usageメモリ使用量
00_example_01.txt AC 4 ms 4688 KB
01.txt AC 4 ms 4688 KB
02.txt AC 4 ms 4684 KB
03.txt AC 4 ms 4688 KB
04.txt AC 4 ms 4688 KB
05.txt AC 5 ms 4688 KB
06.txt AC 5 ms 4684 KB
07.txt AC 5 ms 4688 KB
08.txt AC 5 ms 4688 KB
09.txt AC 4 ms 4688 KB
10.txt AC 4 ms 4688 KB
11.txt AC 4 ms 4692 KB
12.txt AC 4 ms 4684 KB
13.txt AC 4 ms 4692 KB
14.txt AC 5 ms 4684 KB
15.txt AC 5 ms 4688 KB
16.txt AC 5 ms 4688 KB
17.txt AC 5 ms 4688 KB
18.txt AC 4 ms 4684 KB
19.txt AC 4 ms 4688 KB
20.txt AC 4 ms 4688 KB
21.txt AC 4 ms 4692 KB
22.txt AC 4 ms 4684 KB
23.txt AC 4 ms 4684 KB
24.txt AC 4 ms 4692 KB
25.txt AC 4 ms 4688 KB
26.txt AC 4 ms 4684 KB
27.txt AC 5 ms 4692 KB
28.txt AC 5 ms 4688 KB
29.txt AC 5 ms 4688 KB
30.txt AC 5 ms 4684 KB
31.txt AC 4 ms 4692 KB
32.txt AC 4 ms 4692 KB
33.txt AC 4 ms 4684 KB
34.txt AC 4 ms 4692 KB
35.txt AC 5 ms 4688 KB
36.txt AC 5 ms 4692 KB
37.txt AC 5 ms 4692 KB
38.txt AC 5 ms 4688 KB
39.txt AC 5 ms 4692 KB