#include "springboard.h"
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 % 2;
}
// ���� ���� ���� R ������ �ٿ��� �Ѵ�.
// x�� ������ (R + x) % (N + 1) ���� R�� ����.
for(;;){
// [rs, re]
// [rs, rm] [rm + 1, re]
if(rs == re){
// ������ Ȯ����
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); }
}
}
# |
결과 |
실행 시간 |
메모리 |
Grader output |
1 |
Correct |
0 ms |
1132 KB |
Output is correct |
2 |
Correct |
0 ms |
1132 KB |
Output is correct |
3 |
Correct |
0 ms |
1132 KB |
Output is correct |
4 |
Correct |
0 ms |
1132 KB |
Output is correct |
5 |
Correct |
0 ms |
1132 KB |
Output is correct |
6 |
Incorrect |
0 ms |
1132 KB |
Output isn't correct |
7 |
Halted |
0 ms |
0 KB |
- |