제출 #406790

#제출 시각아이디문제언어결과실행 시간메모리
406790KleindianaLexingtonMouse (info1cup19_mouse)C++17
40.67 / 100
200 ms200 KiB
#include "grader.h"
#include <bits/stdc++.h>
using namespace std;

bool ok[300];

void solve(int N) {
	memset(ok, false, sizeof(ok));
	vector<int> q;
	for(int i = 1; i <= N; i++) {
		q.push_back(i);
	}
	random_shuffle (q.begin(), q.end());
	for(int i = 0; i < N; i++) {
		if(ok[i]) {
			continue;
		}
		int val = -1;
		int idx1 = -1;
		int idx2 = -1;
		for(int j = i; j < N; j++) {
			if(ok[j]) {
				continue;
			}
			swap(q[i], q[j]);
			int ret = query(q);
			if(ret == N) {
				return;
			}
			if(ret > val) {
				val = ret;
				idx1 = j;
				idx2 = -1;
			}
			else if(ret == val) {
				idx2 = j;
			}
			swap(q[i], q[j]);
		}
		if(idx2 == -1) {
			swap(q[i], q[idx1]);
			ok[i] = true;
			ok[idx1] = true;
		}
		else {
			swap(q[i], q[idx1]);
			swap(q[idx1], q[idx2]);
			int ret = query(q);
			if(ret == N) {
				return;
			}
			if(ret > val) {
				ok[i] = true;
				ok[idx2] = true;
			}
			else {
				swap(q[idx1], q[idx2]);
				swap(q[i], q[idx2]);
				ok[i] = true;
				ok[idx1] = true;
			}
		}
	}
	query(q);
}
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...