| # | 제출 시각 | 아이디 | 문제 | 언어 | 결과 | 실행 시간 | 메모리 | 
|---|---|---|---|---|---|---|---|
| 28505 | 三( ε:) (#68) | LR Springboard (FXCUP2_springboard) | C++11 | 3 ms | 1132 KiB | 
이 제출은 이전 버전의 oj.uz에서 채점하였습니다. 현재는 제출 당시와는 다른 서버에서 채점을 하기 때문에, 다시 제출하면 결과가 달라질 수도 있습니다.
#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... | ||||
