Submission #250215

#TimeUsernameProblemLanguageResultExecution timeMemory
250215MarcoMeijerCave (IOI13_cave)C++14
100 / 100
918 ms804 KiB
#include "cave.h" #include <bits/stdc++.h> using namespace std; //macros typedef long long ll; typedef pair<int, int> ii; typedef tuple<int, int, int> iii; typedef vector<int> vi; typedef vector<ii> vii; typedef vector<iii> viii; typedef vector<ll> vll; #define REP(a,b,c) for(int a=int(b); a<int(c); a++) #define RE(a,c) REP(a,0,c) #define RE1(a,c) REP(a,1,c+1) #define REI(a,b,c) REP(a,b,c+1) #define REV(a,b,c) for(int a=int(c-1); a>=int(b); a--) #define INF 1e9 #define pb push_back #define fi first #define se second #define sz size() mt19937 rng(chrono::steady_clock::now().time_since_epoch().count()); //===================// // Added libraries // //===================// //===================// //end added libraries// //===================// const int MX = 5100; int n; int mask[MX], comb[MX], temp[MX]; int con[MX]; int ask(int lb, int ub, bool open) { RE(i,n) { if(mask[i]) temp[i] = comb[i]; else temp[i] = (lb <= i && i <= ub) ^ open ^ true; } int ret = tryCombination(temp); if(ret == -1) ret = n; return ret; } void exploreCave(int N) { n = N; RE(i,n) mask[i] = 0; RE(i,n) { int lb=0, ub=N-1; bool open = (ask(lb, ub, 1) > i); while(lb != ub) { int mid=(lb+ub)/2; if(ask(lb, mid, open) > i) ub=mid; else lb=mid+1; } mask[lb] = 1; comb[lb] = open; con[lb] = i; } answer(comb, con); }
#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...