Submission #1362672

#TimeUsernameProblemLanguageResultExecution timeMemory
1362672tkm_algorithmsCave (IOI13_cave)C++20
100 / 100
263 ms500 KiB
#include "cave.h"
#include <bits/stdc++.h>
using namespace std;
using ll = long long;
//#define int ll
//using P = pair<int, int>;
#define all(x) x.begin(), x.end()
#define rep(x,s,e) for (auto x=(s)-((s)>(e));x!=(e)-((s)>(e));((s)<(e)?x++:x--))
#define sz(x) (int)x.size()
const char nl = '\n';

void exploreCave(int N) {
	int S[N], D[N];
	memset(S, 0, sizeof S);
	memset(D, -1, sizeof D);
	int p = tryCombination(S);
	rep(i, 0, N) { // i-1 -cenli hemme gapy acyk
		if (p == i) { // yapyk
			int l = -1, r = N-1;
			while (r-l>1) {
				int mid = l+r>>1;
				rep(j, 0, mid+1)if (D[j] == -1)S[j] ^= 1;
				int a = tryCombination(S);
				rep(j, 0, mid+1)if (D[j] == -1)S[j] ^= 1;
				if (a != p)r = mid; // acdym
				else l = mid;
			}
			D[r] = p, S[r] ^= 1;
		} else { // acyk
			int l = -1, r = N-1;
			while (r-l>1) {
				int mid = l+r>>1;
				rep(j, 0, mid+1)if (D[j] == -1)S[j] ^= 1;
				int a = tryCombination(S);
				rep(j, 0, mid+1)if (D[j] == -1)S[j] ^= 1;
				if (a == i)r = mid;
				else l = mid;
			}
			D[r] = i;
		}
		p = tryCombination(S);
	}
	answer(S, D);
}
#Result Execution timeMemoryGrader output
Fetching results...
#Result Execution timeMemoryGrader output
Fetching results...
#Result Execution timeMemoryGrader output
Fetching results...
#Result Execution timeMemoryGrader output
Fetching results...
#Result Execution timeMemoryGrader output
Fetching results...