Submission #928751

#TimeUsernameProblemLanguageResultExecution timeMemory
928751JuanchokiCave (IOI13_cave)C++14
100 / 100
361 ms604 KiB
#include"cave.h" #include <bits/stdc++.h> using namespace std; /* int S[1<<20], D[1<<20]; int N; int tryCombination(int comb[]) { int mini = 1<<20; for (int i = 0; i < N; i++) if (S[i] != comb[i]) mini = min (mini, D[i]); if (mini == 1<<20) mini = -1; return mini; } void answer (int arr[], int otro[]) { for (int i = 0; i < N; i++) if (arr[i] != S[i]) { cout << "WA"; return; } for (int i = 0; i < N; i++) if (otro[i] != D[i]) { cout << "WA"; return; } cout << "AC"; } void imprime (int arr[]) { for (int i = 0; i < N; i++) cout << arr[i] << " "; cout << '\n'; } */ void llena (int l, int r, int val, int arr[], bool visi[]) { for (int i = l; i <= r; i++) { if (visi[i]) continue; arr[i] = val; } } void exploreCave(int N) { int arr[N]; int otro[N]; bool visi[N]; for (int i = 0; i < N; i++) { arr[i] = 0; visi[i] = 0; } int last = 0; while (last < N) { llena(0, N-1, 0, arr, visi); int temp = tryCombination(arr); //puros ceros xd int necesita = 0; if (temp == last) necesita = 1; int opuesto = 0; if (necesita == 0) opuesto = 1; int l = 0, r = N; while (l < r) { int mit = (l+r)>>1; llena(l, mit, necesita, arr, visi); llena(mit+1, r, opuesto, arr, visi); temp = tryCombination(arr); if (temp == last) // no esta del lado izquierdo { llena(l, mit, opuesto, arr, visi); llena(mit+1, r, necesita, arr, visi); l = mit+1; continue; } //esta del lado izquierdo r = mit; } otro[l] = last; visi[l] = 1; arr[l] = necesita; last++; } //imprime(arr); //imprime(otro); answer(arr, otro); }
#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...