만드는 중입니다

아직 만드는 중이라 바뀔 수 있습니다

동전 게임

시간 제한90초메모리 제한2048 MB

요약
두 플레이어가 번갈아 동전을 네 가지 각도 중 하나로 돌리고 화살표 방향으로 1 단위씩 이동시킵니다. 500번 이동 후 x 좌표가 음수이면 당신이 이깁니다.
난이도

어려움10점 중 8점

유형
게임 이론, 기하, 시뮬레이션
정답자
아직 제출이 없습니다

문제

지금이 진짜 게임을 할 시간이다! 하지만 나에게는 작은 동전 하나밖에 없다. 그러니 이걸로 재미있는 것을 해 보자.

이 동전은 평범한 동전이 아니다. 특별한 그림이 있어서 회전한 각도를 쉽게 알 수 있다. 동전 면의 한 점을 고르면 중심에서 그 점까지 화살표를 그릴 수 있다. 흥미가 생기는가? 나도 그럴 줄 알았다. 이제 게임을 시작해 보자.

동전을 2차원 좌표평면의 원점에 놓고, 양의 OyOy 축을 향하도록 둔다. 게임은 턴제로 진행된다. 각 턴마다 현재 차례인 플레이어가 미리 정해진 네 가지 각도 중 하나로 동전을 회전시킨 뒤, 화살표 방향으로 1만큼 전진시킨다.

게임은 총 500번의 전체 차례로 진행된다. 한 플레이어가 500번, 상대 플레이어가 500번 움직인다. 모든 차례가 끝난 뒤 동전의 x좌표가 음수이면 당신이 이기고, 그렇지 않으면 내가 이긴다.

회전 각도의 후보는 현재 좌표 (x,y)(x, y)에 따라 다음 식으로 계산한다.

  1. α1=x2+y2+x2+A⋅∣x∣\alpha_1 = \sqrt{x^2 + y^2} + x^2 + A \cdot |x|
  2. α2=x2+y2−x2−B⋅∣x∣\alpha_2 = \sqrt{x^2 + y^2} - x^2 - B \cdot |x|
  3. α3=x2+y2+y2+C⋅∣y∣\alpha_3 = \sqrt{x^2 + y^2} + y^2 + C \cdot |y|
  4. α4=x2+y2−y2−D⋅∣y∣\alpha_4 = \sqrt{x^2 + y^2} - y^2 - D \cdot |y|

여기서 AA, BB, CC, DD는 게임 시작 전에 정해 둔 상수이다.

어떻게 이겨야 할지 막막한가? 내가 이미 모든 전략을 짜 두었다고 생각하는가? 걱정하지 마라. 작은 이점을 하나 주겠다. 나는 눈 깜짝할 사이에 수를 둔다.

힌트

예제는 입력과 출력 형식을 보여 주기 위한 것이다. 실제 채점에서는 플레이어가 500번 움직이고, 심사 프로그램은 모든 수를 소수점 18자리까지 출력한다.

정밀도 문제를 피하려면 심사 프로그램의 동전 이동 함수를 사용해도 된다.

double pi = acos(-1.);

void rotate_and_move(double &x, double &y, double &a, int type) {
    double diff = 0;
    double s = sqrt(x * x + y * y);
    if (type == 1) diff = s + x * x + A * fabs(x);
    if (type == 2) diff = s - x * x - B * fabs(x);
    if (type == 3) diff = s + y * y + C * fabs(y);
    if (type == 4) diff = s - y * y - D * fabs(y);
    a += diff;
    a = fmod(a, 2 * pi);
    x += cos(a);
    y += sin(a);
}

예제1

  1. 예제 1

    입력
    1
    1 1 1 1
    0.00 0.00 1.57
    1
    0.00 1.00 1.57
    
    -0.84 1.54 2.57
    1
    0.08 1.14 5.88
    
    0.76 1.88 0.82
    2
    0.82 2.88 1.51
    
    -0.18 3.00 3.02
    1
    0.82 2.94 6.22
    
    0.37 3.84 2.04
    4
    1.37 3.74 -0.10
    
    
    예상 출력
    
    
    
    1
    
    
    
    1
    
    
    
    2
    
    
    
    3
    
    
    
    3