제출 #1259951

#제출 시각아이디문제언어결과실행 시간메모리
1259951terracottaliteIsland Hopping (JOI24_island)C++20
2 / 100
2 ms404 KiB
#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

char vi[400] = { 0 };
char ad[400][400] = { 0 };
int c[400];
int d[400];

void solve(int n, int l) {
	int root = 1;
	d[0] = root;

	for (int i=1;i<n;i++) {
		d[i] = query(root, i);
	}

	for (int i=0;i<n;i++) {
		c[d[i]] = i;
	}

	vi[0] = 1;

	for (int i=1;i<n;i++) {
		if (vi[i]) continue;

		int x = -1;
		int v = 1;
		int y = d[i];
		do {
			x = query(y, v++);
			if (c[x] > c[i]) vi[x] = 1;
			ad[y][x] = 1;
			ad[x][y] = 1;
		} while (c[x] > c[y]);
	}

	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 timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...