Submission #380283

#TimeUsernameProblemLanguageResultExecution timeMemory
380283rainboy코알라 (APIO17_koala)C11
66 / 100
47 ms512 KiB
#include "koala.h"
#include <string.h>
 
#define N	100
 
int minValue(int n, int w) {
	static int bb[N], rr[N];
	int i;
 
	memset(bb, 0, n * sizeof *bb), bb[0] = 1;
	playRound(bb, rr);
	for (i = 1; i < n; i++)
		if (rr[i] == 0)
			return i;
	return 0;
}
 
int aa[][3] = { { 2, 4, 11 }, { 2, 4, 6 }, { 2, 4, 0 }, { 2, 0, 0 }, { 0, 0, 0 } };
 
int kk[] = { 3, 3, 2, 1, 0 };
char used[N];
 
int maxValue(int n, int w) {
	static int bb[N], rr[N];
	int g, i, r, cnt;
 
	if (n >= 44)
		g = 0;
	else if (n >= 20)
		g = 1;
	else if (n >= 8)
		g = 2;
	else if (n >= 4)
		g = 3;
	else if (n >= 2)
		g = 4;
	else {
		for (i = 0; i < N; i++)
			if (!used[i])
				return i;
		return -1;
	}
	for (i = 0; i < N; i++)
		bb[i] = !used[i];
	playRound(bb, rr);
	for (r = 0; r < kk[g]; r++) {
		for (i = 0; i < N; i++)
			if (bb[i] && rr[i])
				bb[i] = aa[g][r];
			else
				bb[i] = 0;
		playRound(bb, rr);
	}
	cnt = 0;
	for (i = 0; i < N; i++)
		if (bb[i] && rr[i])
			cnt++;
	for (i = 0; i < N; i++)
		if (bb[i] && rr[i])
			return i;
	return -1;
}
 
int greaterValue(int n, int w) {
	// TODO: Implement Subtask 3 solution here.
	// You may leave this function unmodified if you are not attempting this
	// subtask.
	return 0;
}
 
int n_;

int compare(int i, int j) {
	static int bb[N], rr[N];

	memset(bb, 0, n_ * sizeof *bb);
	bb[i] = bb[j] = n_;
	playRound(bb, rr);
	return rr[i] > bb[i] ? 1 : -1;
}

void sort(int *ii, int l, int r) {
	static int jj[N];
	int m, i, j, k;

	if (r - l == 1)
		return;
	m = (l + r) / 2;
	sort(ii, l, m), sort(ii, m, r);
	i = l, j = m, k = l;
	while (i < m && j < r)
		jj[k++] = compare(ii[i], ii[j]) < 0 ? ii[i++] : ii[j++];
	while (i < m)
		jj[k++] = ii[i++];
	while (j < r)
		jj[k++] = ii[j++];
	memcpy(ii + l, jj + l, (r - l) * sizeof *jj);
}

void allValues(int n, int w, int *pp) {
	static int ii[N];

	if (w == n * 2) {
		int i;

		for (i = 0; i < n; i++)
			ii[i] = i;
		n_ = n, sort(ii, 0, n);
		for (i = 0; i < n; i++)
			pp[ii[i]] = i + 1;
	} else {
		int p;
 
		for (p = n; p >= 1; p--) {
			int i = maxValue(p, p);
 
			used[i] = 1, pp[i] = p;
		}
	}
}
#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...