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 "cycle.h"
#include <bits/stdc++.h>
using namespace std;
int cnt_jump = 0;
bool my_jump(int x) {
++cnt_jump;
// cout << "Salto #" << cnt_jump << " x = " << x << endl;
bool res = jump(x);
return res;
}
void escape(int n) {
cnt_jump = 0;
if (n == 2) {
my_jump(1);
return;
}
bool flag = my_jump(0);
if (!flag) {
// inicialmente, estoy en la zona de F
int lo = 1, hi = n/2;
// if (n % 2 == 0) hi = n / 2 - 1;
// else hi = n / 2;
bool salto_anterior_verdadero = false;
int salto_anterior = 0;
while (lo <= hi) {
int mid = lo + (hi - lo) / 2;
int x;
if (salto_anterior_verdadero)
x = n - salto_anterior + mid;
else
x = mid - salto_anterior;
if (my_jump(x)) {
hi = mid - 1;
salto_anterior_verdadero = true;
}
else {
lo = mid + 1;
salto_anterior_verdadero = false;
}
salto_anterior = mid;
}
if (salto_anterior_verdadero)
my_jump(n / 2);
else
my_jump(n / 2 + 1);
}
else {
// inicialmente, estoy en la zona de T
int lo = 1, hi = n/2;
bool salto_anterior_verdadero = false;
int salto_anterior = 0;
while (lo <= hi) {
int mid = lo + (hi - lo) / 2;
int x;
if (salto_anterior_verdadero)
x = n - salto_anterior + mid;
else
x = mid - salto_anterior;
x %= n;
if (x < 0) x += n;
if (my_jump(x)) {
lo = mid + 1;
salto_anterior_verdadero = true;
}
else {
hi = mid - 1;
salto_anterior_verdadero = false;
}
salto_anterior = mid;
}
if (salto_anterior_verdadero) {
// no tengo que saltar
}
else
my_jump(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... |