結果
| 問題 |
No.2085 Directed Complete Graph
|
| ユーザー |
|
| 提出日時 | 2022-09-26 02:23:50 |
| 言語 | Rust (1.83.0 + proconio) |
| 結果 |
AC
|
| 実行時間 | 160 ms / 2,000 ms |
| コード長 | 1,809 bytes |
| コンパイル時間 | 12,470 ms |
| コンパイル使用メモリ | 402,804 KB |
| 実行使用メモリ | 25,104 KB |
| 平均クエリ数 | 2534.76 |
| 最終ジャッジ日時 | 2024-12-22 15:53:07 |
| 合計ジャッジ時間 | 16,039 ms |
|
ジャッジサーバーID (参考情報) |
judge1 / judge3 |
(要ログイン)
| ファイルパターン | 結果 |
|---|---|
| sample | AC * 2 |
| other | AC * 15 |
ソースコード
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() - 1);
for i in 0..arr.len() {
print!("{}", arr[i] + 1);
if i + 1 == arr.len() {
println!("");
}
else {
print!(" ");
}
}
}