제출 #1303655

#제출 시각아이디문제언어결과실행 시간메모리
1303655nicolo_010Cave (IOI13_cave)C++20
100 / 100
532 ms508 KiB
#include "cave.h" #include <bits/stdc++.h> using namespace std; using ll = long long; using pii = pair<int, int>; int n; void know_i(int* d) { //d[i] = j significa que el switch i esta conectada a la puerta j. //a[i] = j. " " j " " i. int s[n]; int a[n]; for (int i=0; i<n; i++) { a[d[i]] = i; s[i] = 0; } for (int i=0; i<n; i++) { s[a[i]] = 1; int dd = tryCombination(s); if (dd == i) s[a[i]] = 0; else s[a[i]] = 1; } answer(s, d); } void know_comb(int* s) { int a[n]; for (int i=0; i<n; i++) { a[i] = s[i]; } int d[n]; for (int i=0; i<n; i++) { a[i] = 1-s[i]; int dd = tryCombination(a); d[i] = dd; a[i] = s[i]; } answer(s, d); } void exploreCave(int N) { n = N; int s[n]; int d[n]; vector<bool> vis(n, false); for (int i=0; i<n; i++) { int t; for (int i=0; i<n; i++) { if (vis[i]) { continue; } s[i] = 0; } int dd = tryCombination(s); if (dd>i || dd==-1) t=0; else t=1; int l=0, r=n-1; int ans; while (l <= r) { int m = (l+r)/2; for (int i=0; i<=m; i++) { if (vis[i]) { continue; } s[i] = t; } for (int i=m+1; i<n; i++) { if (vis[i]) { continue; } s[i] = 1-t; } dd = tryCombination(s); if (dd>i || dd==-1) { r = m-1; ans = m; } else { l = m+1; } } d[ans] = i; s[ans] = t; vis[ans] = true; } 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...