제출 #528781

#제출 시각아이디문제언어결과실행 시간메모리
528781c28dnv9q3Monster Game (JOI21_monster)C++17
10 / 100
206 ms284 KiB
#include "monster.h"

#include <algorithm>
#include <iostream>
#include <vector>

using namespace std;

struct Monster {
	int index, wins;

	bool operator<(const Monster &m) const {
		return wins < m.wins;
	}
};

std::vector<int> T;
std::vector<Monster> monsters;

/*int findPivot(int from, int to) {
	int pivot = T[to - 1];
	for (int i = from; i < to - 1; ++i) {
		if (Query(i, pivot)) {	// i wins
			//swap(T[i], T[]);
		}
	}
}

void findSequence(int from, int to) {
	if (from == to + 1) {
		return;
	}

	int pivot = findPivot(from, to);

	findSequence(from, pivot);
	findSequence(pivot + 1, to);
}*/

std::vector<int> Solve(int N) {
	T = std::vector<int>(N);
	monsters = std::vector<Monster>(N);

	// findSequence(0, N);

	for (int i = 0; i < N; ++i) {
		monsters[i] = {i, 0};
	}

	for (int i = 0; i < N; ++i) {
		for (int j = 0; j < i; ++j) {
			if (i == j) {
				continue;
			}

			if (Query(i, j)) {	// i wins
				++monsters[i].wins;
			} else {
				++monsters[j].wins;
			}
		}
	}

	sort(monsters.begin(), monsters.end());

	if (!Query(monsters[0].index, monsters[1].index)) {
		swap(monsters[0], monsters[1]);
	}
	if (Query(monsters[N - 1].index, monsters[N - 2].index)) {
		swap(monsters[N - 2], monsters[N - 1]);
	}

	for (int i = 0; i < N; ++i) {
		T[monsters[i].index] = i;
	}

	return T;
}
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...