This submission is migrated from previous version of oj.uz, which used different machine for grading. This submission may have different result if resubmitted.
//Emmanuel Antonio Cardenaz
//21 Abril 2014
#include "cave.h"
#include <string.h>
#include <stdlib.h>
#include <stdio.h>
#include <math.h>
typedef struct {
int valorSwitch;
int puerta;
int active;
int size;
} swit;
swit * codigo;
void loadcode(int N) {
codigo = (swit *) calloc(N, sizeof (swit));
int i;
for (i = 0; i < N; i++) {
codigo[i].size = 1;
codigo[i].valorSwitch = 1;
codigo[i].active = -1;
codigo[i].puerta = -1;
}
}
void complementa(int ini, int fin) {
int i;
for (i = ini; i <= fin; i++) {
if (codigo[i].active == -1) {
if (codigo[i].valorSwitch == 1) {
codigo[i].valorSwitch = 0;
} else {
codigo[i].valorSwitch = 1;
}
} else {
codigo[i].valorSwitch = codigo[i].active;
}
}
}
void exploreCave(int N) {
int i, j;
int izquierda, derecha, m;
int code[N];
int puerta[N];
loadcode(N);
int t;
int v;
int x;
for (i = 0; i < N; i++) {
izquierda = 0;
derecha = N - 1;
complementa(0, N - 1);
for (x = 0; x < N; x++) {
code[x] = codigo[x].valorSwitch;
}
t = tryCombination(code);
if (t == i) {
complementa(0, N - 1);
}
while (izquierda < derecha) {
m = (izquierda + derecha) / 2;
for (j = izquierda; j <= m; j++) {
if (codigo[j].active == -1)
codigo[j].valorSwitch ^= 1;
else
codigo[j].valorSwitch = codigo[j].active;
}
for (x = 0; x < N; x++) {
code[x] = codigo[x].valorSwitch;
}
v = tryCombination(code);
if (v == i) {
complementa(izquierda,m);
derecha = m;
} else {
izquierda = m + 1;
}
}
codigo[izquierda].active = codigo[izquierda].valorSwitch;
codigo[izquierda].puerta = i;
}
for (i = 0; i < N; i++) {
code[i] = codigo[i].valorSwitch;
puerta[i] = codigo[i].puerta;
}
answer(code, puerta);
}
# | 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... |