結果

問題 No.2085 Directed Complete Graph
ユーザー niuezniuez
提出日時 2022-09-26 02:23:24
言語 Rust
(1.77.0 + proconio)
結果
WA  
実行時間 -
コード長 1,805 bytes
コンパイル時間 10,782 ms
コンパイル使用メモリ 403,456 KB
実行使用メモリ 25,232 KB
平均クエリ数 2534.76
最終ジャッジ日時 2024-06-02 00:22:22
合計ジャッジ時間 14,149 ms
ジャッジサーバーID
(参考情報)
judge3 / judge1
このコードへのチャレンジ
(要ログイン)

テストケース

テストケース表示
入力 結果 実行時間
実行使用メモリ
testcase_00 WA -
testcase_01 WA -
testcase_02 WA -
testcase_03 WA -
testcase_04 WA -
testcase_05 WA -
testcase_06 WA -
testcase_07 WA -
testcase_08 WA -
testcase_09 WA -
testcase_10 WA -
testcase_11 WA -
testcase_12 WA -
testcase_13 WA -
testcase_14 WA -
testcase_15 WA -
testcase_16 WA -
権限があれば一括ダウンロードができます

ソースコード

diff #

fn main() {
    let n: usize = readln();
    if n == 2 {
        if query(0, 1) {
            answer(&[0, 1]);
        }
        else {
            answer(&[1, 0]);
        }
    }
    else {
        let mut path = triple();
        for i in 3..n {
            let mut down = -1;
            let mut up = path.len() as isize;
            while up - down > 1 {
                let mid = ((up + down) >> 1) as usize;
                let e = query(path[mid], i);
                if e {
                    // down
                    down = mid as isize;
                }
                else {
                    up = mid as isize;
                }
            }
            path.insert(up as usize, i);
        }
        answer(&path);
    }
}

fn triple() -> Vec<usize> {
    let a = query(0, 1);
    let b = query(1, 2);
    let c = query(2, 0);
    if a && b {
        vec![0, 1, 2]
    }
    else if b && c {
        vec![1, 2, 0]
    }
    else if c && a {
        vec![2, 0, 1]
    }
    else if !a && !b {
        vec![2, 1, 0]
    }
    else if !b && !c {
        vec![0, 2, 1]
    }
    else {
        vec![1, 0, 2]
    }
}

fn get_line() -> String {
    let mut s = String::new();
    std::io::stdin().read_line(&mut s).ok();
    s.trim().to_string()
}
fn readln<T>() -> T
    where
        T: std::str::FromStr,
        <T as std::str::FromStr>::Err: std::fmt::Debug {
    get_line().parse().unwrap()
}
fn query(i: usize, j: usize) -> bool {
    println!("? {} {}", i + 1, j + 1);
    let ans: usize = readln();
    ans == 1
}
fn answer(arr: &[usize]) {
    println!("!");
    println!("{}", arr.len());
    for i in 0..arr.len() {
        print!("{}", arr[i] + 1);
        if i + 1 == arr.len() {
            println!("");
        }
        else {
            print!(" ");
        }
    }
}
0