# | Time | Username | Problem | Language | Result | Execution time | Memory |
---|---|---|---|---|---|---|---|
28505 | 三( ε:) (#68) | LR Springboard (FXCUP2_springboard) | C++11 | 3 ms | 1132 KiB |
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 "springboard.h"
// #include <cstdio>
void Reorder(int N) {
// �ϴ� ����� ��� ����.
int m = (1 + N) / 2;
int r = PutBall(m);
int rs = 0, re = 0;
if(r == -1){ // �������� ����. [1, m] �� R Ȯ��. [m + 1, N] �� ��.
r = PutBall(m);
// RRRRLLLL : -1, RRRRRRRR
// RRRRLLLR : LLLLLLLL
// RRRRLLRR : RLLLLLLL
// RRRRRLLLL : LLLLLLLLL
// RRRRRLLLR : RLLLLLLLL
// RRRRRLLRR : RRLLLLLLL
if(r == -1){ // ���� �� R
PutBall(1); return ;
}
rs = 0; re = m - 1;
}
else{ // ���������� ����. [m, N] �� L Ȯ��. [1, m - 1] �� ��.
r = PutBall(m); // �� -1
// RRRLLLLL : RRRRRRRL
// LRRLLLLL : RRRRRRLL
// LLRLLLLL : RRRRRLLL
// RRRRLLLLL : RRRRRRRRR
// LRRRLLLLL : RRRRRRRRL
// LLRRLLLLL : RRRRRRRLL
// LLLLLLLLL : RRRRRLLLL
rs = m;
re = N - (N + 1) % 2;
}
// ���� ���� ���� R ������ �ٿ��� �Ѵ�.
// x�� ������ (R + x) % (N + 1) ���� R�� ����.
for(;;){
// printf("rs : %d, re : %d\n", rs, re);
// [rs, re]
// [rs, rm] [rm + 1, re]
if(rs == re){
// ������ Ȯ����
if(rs != 0) PutBall(N - rs + 1);
return ;
}
if(re == rs + 1){
r = PutBall(N - rs);
// ���� R�� �ǰ� -1 �� �߰ų�, ���� L�� �ǰ� 1�� ��
if(r == 1) return ;
if(r == -1){ PutBall(1); return ; }
}
int rm = (rs + re) / 2;
// rm������ -1, rm + 1������ 1�� �ǵ��� ����
r = PutBall(N - rm);
if(r == -1){ rs += N - rm; re = N; }
else{ rs = 0; re = (re + N - rm) % (N + 1); }
}
}
# | Verdict | Execution time | Memory | Grader output |
---|---|---|---|---|
Fetching results... |