아직 만들고 있는 페이지입니다.

이 페이지는 아직 만드는 중입니다. 보이는 내용은 바뀔 수 있습니다.

이상한 판 뒤집기 게임

시간 제한1.5초메모리 제한1024 MB

요약
사용하지 않은 버튼을 번갈아 누르며 인접한 두 판을 뒤집을 수 있는 인터랙티브 게임에서, 지정된 플레이어가 이기도록 수를 안내한다.
난이도

보통10점 중 7점

유형
게임 이론, 그리디, 구현
정답자
아직 제출이 없습니다

문제

이 문제는 인터랙티브 문제이다.

KSA의 알고리즘 문제 해결 연구회 Automata의 두 연구회원 everyone과 here는 2023 KSA Automata Winter Contest를 기념하여 이상한 판 뒤집기 게임을 한다. 이상한 판 뒤집기 게임의 규칙은 아래와 같다.

NN개의 판이 바닥에 원형으로 배열되어 있다. 판의 번호는 시계 반대 방향으로 순서대로 0,1,⋯ ,N−10, 1, \cdots, N-1이다. 각각의 판에 대해 한 면은 빨간색, 다른 한 면은 파란색이다. 바닥에는 NN개의 버튼 또한 놓여있는데, ii번 버튼은 ii번 판과 (i+1) mod N(i+1) \bmod N번 판 사이에 있다. (0≤i\<N)(0\le i\<N)

초기 상태에 각각의 판이 어떤 면이 보이도록 놓여있는지와 누구의 차례가 먼저인지 주어진다. 두 플레이어가 번갈아 가며 차례를 가지며, 자신의 차례가 되면 아래 두 가지 동작 중 하나를 선택해서 할 수 있다.

  • kk번 버튼을 누른다. 이 경우 아무 판도 뒤집지 않는다. 이 경우 c=0c=0이다.
  • kk번 버튼을 누르고, kk번 판과 (k+1) mod N(k+1) \bmod N번 판을 동시에 뒤집는다. 이 경우 c=1c=1이다.

단, 한번 눌린 버튼은 비활성화되어 다시 누를 수 없다.

모든 버튼이 비활성화되는 순간 게임이 종료된다. 이때 빨간색 면이 보이는 판의 개수와 파란색 면이 보이는 판의 개수가 같으면 everyone이 이기고, 다르면 here가 이긴다.

everyone과 here는 당신에게 도움을 요청했다. 그러나 동시에 둘 모두를 도와줄 수는 없으므로, 당신은 둘 중 한 사람을 골라 그 사람이 이기는 방법을 알려줘야 한다.

이 게임은 임의의 정수 N≥2N\ge2에 대하여 잘 정의되지만, 출제자는 여러분이 2023 KSA Automata Winter Contest에서 더 높은 점수를 받을 수 있도록 NN이 44의 배수라는 제약 조건을 추가하였다.

제한

  • 4≤N≤10004\le N\le 1000; NN은 44의 배수
  • M\in\\{everyone,,here\\}
  • 모든 0≤i\<N0\le i\<N에 대하여 S\_i\in\\{R,,B\\}
  • T\in\\{everyone,,here\\}
  • c∈0,1c\in\\{0,1\\}
  • 0≤k\<N0\le k\<N
  • 각 시행의 kk의 값은 모두 서로 다름

힌트

당신의 프로그램은 무언가를 출력한 후 즉시 출력 버퍼를 비워야 한다. 다음은 언어별 출력 버퍼를 비우는 방법이다.

  • C — fflush(stdout)
  • C++ — std::cout.flush()
  • Python — sys.stdout.flush()
  • Java — System.out.flush()
  • 그 외의 언어는 각 언어의 Documentation을 참고한다.

또한, 예제의 빈 줄은 입출력이 어떤 방식으로 이루어지는지 이해를 돕기 위해 의도적으로 추가된 것이며, 실제 입출력에는 빈 줄이 나타나지 않는다.

예제와 같이 게임을 진행하면, 게임이 종료될 때 빨간 면이 보이는 판이 33개, 파란 면이 보이는 판이 55개이므로 here가 이긴다.

예제1

  1. 예제 1

    입력
    8 here
    BBRBRBBR
    
    
    1 2
    
    1 4
    
    0 7
    
    0 0
    
    예상 출력
    
    
    here
    0 3
    
    0 1
    
    0 6
    
    1 5