Submission #1259944

#TimeUsernameProblemLanguageResultExecution timeMemory
1259944terracottaliteIsland Hopping (JOI24_island)C++20
0 / 100
1 ms392 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

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 };

	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 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...