Submission #426664

#TimeUsernameProblemLanguageResultExecution timeMemory
426664Aldas25Cave (IOI13_cave)C++14
100 / 100
383 ms584 KiB
#include "cave.h" #include <bits/stdc++.h> using namespace std; #define FOR(i, a, b) for (int i = (a); i <= (b); i++) #define REP(n) FOR(O, 1, (n)) #define f first #define s second #define pb push_back typedef pair<int, int> pii; typedef vector<int> vi; typedef vector<pii> vii; typedef long long ll; typedef vector<ll> vl; void exploreCave(int N) { int S[N]; int D[N]; bool known[N]; FOR(i, 0, N-1) S[i] = 0, D[i] = i; FOR(i, 0, N-1) known[i] = false; int mx = tryCombination(S); if(mx==-1) mx = N; FOR(i, 0, N-1) { if (mx == i) { FOR(j, 0, N-1) if (!known[j]) S[j] = !S[j]; mx = tryCombination(S); if(mx==-1) mx = N; } /*cout << " i = " << i << " mx = " << mx << " S: "; FOR(j, 0, N-1) cout << S[j] << " "; cout << endl;*/ vi notKnown; FOR(j, 0, N-1) if (!known[j]) notKnown.pb(j); /*cout << " notKnown: "; for (int x : notKnown) cout << x << " "; cout << endl;*/ int le = 0, ri = (int)notKnown.size()-1; while (le < ri) { int mid= (le+ri)/2; int tmpS[N]; FOR(j, 0, N-1) tmpS[j] = S[j]; FOR(j, le, mid) tmpS[notKnown[j]] = !S[notKnown[j]]; int cr = tryCombination(tmpS); //cout << " le = " << le << " ri = " << ri << " mid = " << mid << " tryComb = " << cr << endl; if (cr == i) ri = mid; else le = mid+1; } int swId = notKnown[le]; D[swId] = i; known[swId] = true; //cout << " swId = " << swId << endl; } /*cout << " returnin S: "; FOR(i, 0, N-1) cout << S[i] << " "; cout << endl; cout << " returnin D: "; FOR(i, 0, N-1) cout << D[i] << " "; cout << endl;*/ 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...