Submission #959961

#TimeUsernameProblemLanguageResultExecution timeMemory
959961hqminhuwuCave (IOI13_cave)C++14
12 / 100
212 ms10172 KiB
#include <bits/stdc++.h> #include "cave.h" using namespace std; typedef long long ll; typedef long double ld; typedef pair <ll,ll> pll; typedef pair <int,int> pii; typedef pair <int,pii> piii; #define forr(_a,_b,_c) for(int _a = (_b); _a <= (_c); ++_a) #define ford(_a,_b,_c) for(int _a = (_b) + 1; _a --> (_c);) #define forf(_a,_b,_c) for(int _a = (_b); _a < (_c); ++_a) #define st first #define nd second #define pb push_back #define mp make_pair #define all(x) begin(x),end(x) #define mask(i) (1LL << (i)) #define bit(x, i) (((x) >> (i)) & 1) #define bp __builtin_popcountll #define file "test" const int maxn = 5e5 + 5; const ll oo = 1e9; const ll mod = 1e9 + 7; // 998244353; int flag[maxn], state[maxn], a[maxn], n, ansS[maxn], ansD[maxn]; int get (){ int tmp = tryCombination(a); if (tmp < 0) return oo; return tmp - 1; } void solve (int x){ forr (i, 1, n){ if (flag[i] != -1) a[i] = state[i]; else a[i] = 0; } int f = get(); int u = (f < x); int l = 0, r = n - 1; while (l < r){ int mid = (l + r) >> 1; forr (i, l, r) if (flag[i] == -1) a[i] = (i > mid) ^ u; if (get() < x){ forr (i, l, r) if (flag[i] == -1) a[i] = (i <= mid) ^ u; l = mid + 1; } else r = mid; } state[l] = u; flag[l] = x; } void exploreCave (int num){ n = num; memset (flag, -1, sizeof flag); forf (i, 0, n) solve(i); forf (i, 0, n){ ansS[flag[i]] = state[i]; ansD[flag[i]] = i; } answer(ansS, ansD); }
#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...