Codeforces Round #385 (Div. 2), problem: (D) Hongcow’s Game Solution in C/C++

#include <limits.h>
#include <stdio.h>

#define N	1000

void query(int *ww, int *aa, int k, int n) {
	int i;

	printf("%d\n", k);
	for (i = 0; i < k; i++)
		printf("%d ", ww[i]);
	printf("\n");
	fflush(stdout);
	for (i = 1; i <= n; i++)
		scanf("%d", &aa[i]);
}

int main() {
	int i, j, n;
	static int mm[N + 1];

	scanf("%d", &n);
	for (i = 1; i <= n; i++)
		mm[i] = INT_MAX;
	for (i = 0; 1 << i <= n; i++) {
		int aa[N], bb[N], acnt, bcnt;
		int amin[N + 1], bmin[N + 1];

		acnt = bcnt = 0;
		for (j = 1; j <= n; j++) {
			if ((j & 1 << i) == 0)
				aa[acnt++] = j;
			else
				bb[bcnt++] = j;
		}
		query(aa, amin, acnt, n);
		query(bb, bmin, bcnt, n);
		for (j = 1; j <= n; j++) {
			int min;

			min = (j & 1 << i) == 0 ? bmin[j] : amin[j];
			if (mm[j] > min)
				mm[j] = min;
		}
	}
	printf("-1\n");
	for (i = 1; i <= n; i++)
		printf("%d ", mm[i]);
	printf("\n");
	fflush(stdout);
	return 0;
}
(Visited 26 times, 1 visits today)

About the Author:

Leave A Comment