This submission is migrated from previous version of oj.uz, which used different machine for grading. This submission may have different result if resubmitted.
#include <bits/stdc++.h>
#include "cave.h"
#define pb push_back
#define pii pair<int, int>
#define nyan "(=^・ω・^=)"
#define read_input freopen("in.txt","r", stdin)
#define print_output freopen("out.txt","w", stdout)
typedef long long ll;
typedef long double ld;
using namespace std;
int n;
void filter(int *a, int *b) {
for(int i = 0; i < n; i++)
if(b[i] != -1) a[i] = b[i];
}
void flip(int *a, int l, int r) {
for(int i = l; i <= r; i++) a[i] ^= 1;
}
void exploreCave(int N) {
n = N;
//tryCombination(a);
int a[N], b[N], D[N];
memset(b, -1, sizeof b);
for(int i = 0; i < N-1; i++) {
int t1 = i+1;
memset(a, 0, sizeof a);
filter(a, b);
int check = tryCombination(a);
int x = 0;
if(check != -1 && check < t1) { // i'th gate does not open with 0
flip(a, 0, n-1);
filter(a, b);
x = 1;
}
memset(a, 0, sizeof a);
if(x) flip(a, 0, n-1);
int lo = 0, hi = n-1;
while(lo < hi) {
int mid = lo + hi >> 1;
flip(a, lo, mid); filter(a, b);
int t2 = tryCombination(a);
if(t2 >= t1 || t2 == -1) lo = mid+1;
else {
hi = mid;
flip(a, lo, mid);
}
}
b[lo] = a[lo]; // correct direction of switch of i'th door
D[lo] = i;
}
int hole;
for(int i = 0; i < n; i++) if(b[i] == -1) hole = i;
memset(a, 0, sizeof a); filter(a, b);
int check = tryCombination(a);
if(check == -1) b[hole] = 0;
else b[hole] = 1;
D[hole] = n-1;
/*for(int i = 0; i < n; i++) {
b[i] ^= 1;
D[i] = tryCombination(b);
b[i] ^= 1;
}*/
answer(b, D);
}
Compilation message (stderr)
cave.cpp: In function 'void exploreCave(int)':
cave.cpp:51:20: warning: suggest parentheses around '+' inside '>>' [-Wparentheses]
int mid = lo + hi >> 1;
~~~^~~~
cave.cpp:76:13: warning: 'hole' may be used uninitialized in this function [-Wmaybe-uninitialized]
D[hole] = n-1;
~~~~~~~~^~~~~
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |