Submission #552782

#TimeUsernameProblemLanguageResultExecution timeMemory
552782d4xnCave (IOI13_cave)C++17
100 / 100
503 ms660 KiB
#pragma GCC optimize ("Ofast") #pragma GCC target ("avx2") #include "cave.h" #include <bits/stdc++.h> using namespace std; const int N = 5000; int n; int s[N]; int d[N]; bool vis[N]; // switch que no puedo tocar int cnt; // numero de switchs que me quedan por tocar int mxAbierta; bool abierta; int find(int i) { // cual es el switch que corresponde a la puerta i // cambiar los [l - mid] switchs // si la puerta cambia buscar en los que he cambiado // si no buscar en los que no he cambiado if (mxAbierta <= i) mxAbierta = tryCombination(s); if (mxAbierta == -1) mxAbierta = n; abierta = mxAbierta > i; int l = 1; int r = cnt; while (l < r) { int mid = (l+r)/2; int s2[N]; for (int j = 0; j < n; j++) { s2[j] = s[j]; } int temp = 0; for (int j = 0; j < n && temp < mid; j++) { if (vis[j]) continue; temp++; if (temp >= l) s2[j] = !s2[j]; } int x = tryCombination(s2); if (x == -1) x = n; if (x > i) { if (!abierta) { r = mid; } else { l = mid+1; } } else { if (abierta) { r = mid; } else { l = mid+1; } } } int temp = 0; for (int j = 0; j < n; j++) { if (vis[j]) continue; temp++; if (temp == l) return j; } return rand() % n; // nunca llego } void exploreCave(int nn) { n = nn; cnt = n; for (int i = 0; i < n; i++) { int x = find(i); d[x] = i; if (!abierta) { s[x] = !s[x]; } vis[x] = 1; cnt--; } 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...