제출 #104442

#제출 시각아이디문제언어결과실행 시간메모리
104442eriksuenderhaufCave (IOI13_cave)C++11
100 / 100
990 ms640 KiB
#pragma GCC optimize("O3")
#include <bits/stdc++.h>
#include "cave.h"
//#include "grader.h"
#define enl printf("\n")
#define case(t) printf("Case #%d: ", (t))
#define ni(n) scanf("%d", &(n))
#define nl(n) scanf("%I64d", &(n))
#define nai(a, n) for (int i = 0; i < (n); i++) ni(a[i])
#define nal(a, n) for (int i = 0; i < (n); i++) nl(a[i])
#define pri(n) printf("%d\n", (n))
#define prl(n) printf("%I64d\n", (n))
#define pii pair<int, int>
#define pll pair<long long, long long>
#define vii vector<pii>
#define vi vector<int>
#define pb push_back
#define mp make_pair
#define fi first
#define se second
using namespace std;
typedef long long int ll;
const double pi = acos(-1);
const int MOD = 1e9 + 9;
const int INF = 1e9 + 7;
const int MAXN = 3e5 + 5;
const double eps = 1e-9;

int ask(int arr[]) {
	int cnt = tryCombination(arr);
	if (cnt == -1) cnt = INF;
	return cnt;
}

void exploreCave(int n) {
	int arr[n], ind[n], tmp[n];
	memset(arr, 0, sizeof arr);
	memset(tmp, 0, sizeof tmp);
	vii v;
	for (int i = 0; i < n; i++) {
		int lo = 0, hi = n - 1;
		int fl = (int) (ask(arr) == i);
		while (lo <= hi) {
			int mi = (lo + hi) / 2;
			memset(tmp, -1, sizeof tmp);
			for (int j = lo; j <= hi; j++)
				tmp[j] = fl ^ (j / (mi + 1));
			for (auto it: v)
				tmp[it.fi] = it.se;
			if (ask(tmp) > i)
				hi = mi - 1;
			else 
				lo = mi + 1;
		}
		v.pb({lo, fl});
		arr[lo] = fl;
		tmp[lo] = fl;
		ind[lo] = i;
	}
	answer(arr, ind);
}
#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...