#include <stdio.h>
//#define TEST
#ifndef TEST
#include "island.h"
#else
int query(int x, int k) {
printf("? %d %d\n", x, k);
fflush(stdout);
int ret;
scanf("%d", &ret);
return ret;
}
void answer(int i, int j) {
printf("! %d %d\n", i, j);
fflush(stdout);
}
#endif
void solve(int n, int l) {
int root = 1;
int d[400];
d[0] = root;
int c[400];
for (int i=1;i<n;i++) {
d[i] = query(root, i);
}
for (int i=0;i<n;i++) {
c[d[i]] = i;
}
char vi[400] = { 0 };
char ad[400][400] = { 0 };
int f[400] = { 0 };
vi[0] = 1;
char flag[400] = { 0 };
flag[d[1]] = 1;
f[d[1]]++;
ad[d[1]][root] = 1;
ad[root][d[1]] = 1;
for (int i=1;i<=n;i++) {
if (i == root) continue;
if (flag[i]) continue;
int x = -1;
do {
x = query(i, ++f[i]);
if (c[x] < c[i]) flag[x] = 1;
f[x]++;
ad[i][x] = 1;
ad[x][i] = 1;
} while (c[x] > c[i]);
}
for (int i=1;i<=n;i++) {
for (int j=1;j<=n;j++) {
if (ad[i][j] && i < j) {
answer(i, j);
}
}
}
}
#ifdef TEST
int main() {
int n, l;
scanf("%d %d", &n, &l);
solve(n, l);
}
#endif
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |