제출 #402728

#제출 시각아이디문제언어결과실행 시간메모리
402728prvocislo동굴 (IOI13_cave)C++17
100 / 100
352 ms616 KiB
#include "cave.h"
#include <vector>
using namespace std;
void answer(int S[], int D[]);
int tryCombination(int S[]);

int s[5000], d[5000];
void exploreCave(int n) {
	for (int i = 0; i < n; i++) s[i] = 0, d[i] = -1;
	vector<int> u; // switche o ktorych nevieme ze ktore dvere ovladaju
	for (int i = 0; i < n; i++)
	{
		u.clear();
		for (int sw = 0; sw < n; sw++)
			if (d[sw] == -1) u.push_back(sw);
		int o = tryCombination(s);
		if (o == -1 || o > i) for (int j : u) s[j] ^= 1;
		while (u.size() > 1)
		{
			int h = u.size() / 2;
			vector<int> u1(u.begin(), u.begin() + h), u2(u.begin() + h, u.end());
			for (int j : u1) s[j] ^= 1;
			int q1 = tryCombination(s);
			if (q1 == -1) q1 = n;
			if (q1 > i)
			{
				u = u1;
				for (int j : u1) s[j] ^= 1;
			}
			else u = u2;
		}
		d[u[0]] = i;
		s[u[0]] ^= 1;
	}
	answer(s, d);
}
#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...