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

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

크레인

면접 대비

시간 제한1초메모리 제한128 MB

요약
각 명령마다 관절 하나의 각도가 바뀔 때 n번째 세그먼트 끝점의 좌표를 매번 정확히 소수 두 자리로 출력하는 문제입니다.
난이도

보통10점 중 6점

유형
기하, 수학, 세그먼트 트리, 분할 정복
정답자
아직 제출이 없습니다

문제

ACM이 새 크레인을 구입했다. 이 크레인은 길이가 제각각인 마디 nn개가 유연한 관절로 연결되어 있다. ii번째 마디의 끝은 i+1i+1번째 마디의 시작과 이어져 있다(1≤i<n1 \le i < n). 첫 번째 마디의 시작은 좌표 (0,0)(0, 0)에 고정되어 있고, 그 끝은 좌표 (0,w)(0, w)에 있다. 여기서 ww는 첫 번째 마디의 길이다. 모든 마디는 항상 한 평면 위에 놓이며, 관절은 그 평면 안에서 임의의 회전을 허용한다.

크레인을 제어하는 소프트웨어는 크레인 끝의 위치를 계속 확인해야 한다. 각 명령이 실행된 뒤 nn번째 마디 끝의 위치를 구하는 부분을 작성하라. 크레인의 상태는 이웃한 마디 사이의 각도로 결정된다. 처음에는 모든 각도가 곧게 펴져 있다. 즉 180∘180^\circ이다. 각 명령은 정확히 하나의 관절에서 각도를 바꾼다.

입력

입력은 여러 개의 인스턴스로 이루어지며, 인스턴스는 하나의 빈 줄로 구분된다.

각 인스턴스의 첫 줄에는 두 정수 nn과 cc가 공백으로 구분되어 주어진다(1≤n≤100001 \le n \le 10000, c≥0c \ge 0). nn은 마디의 수, cc는 명령의 수다. 둘째 줄에는 nn개의 정수 l1,…,lnl_1, \dots, l_n이 공백으로 구분되어 주어진다(1≤li≤1001 \le l_i \le 100). lil_i는 ii번째 마디의 길이다. 이어지는 cc개의 줄에는 명령이 하나씩 주어진다. 각 줄에는 두 정수 ss와 aa가 공백으로 구분되어 주어진다(1≤s<n1 \le s < n, 0≤a≤3590 \le a \le 359). 이는 ss번째 마디와 s+1s+1번째 마디 사이의 각도를 aa도로 바꾸라는 명령이며, 각도는 ss번째 마디에서 s+1s+1번째 마디로 반시계 방향으로 측정한다.

출력

각 인스턴스에 대해 cc개의 줄을 출력한다. ii번째 줄에는 ii번째 명령을 실행한 뒤 nn번째 마디 끝의 좌표 xx와 yy를 공백으로 구분하여 출력한다. 각 좌표는 소수점 아래 정확히 두 자리로 출력한다. 반올림 결과가 00인 좌표는 -0.00이 아니라 0.00으로 출력한다. 서로 다른 인스턴스의 출력 사이에는 빈 줄을 하나 넣는다.

원문은 정답 위치와의 차이가 0.020.02 이내면 정답으로 인정했으나, 여기서는 소수점 두 자리 출력값이 정확히 일치해야 한다. 주어지는 입력은 모든 좌표가 반올림 경계에서 충분히 떨어지도록 구성되어 있어, 두 자리 출력값이 항상 명확하게 정해진다.

예제1

  1. 예제 1

    입력
    2 1
    10 5
    1 90
    
    3 2
    5 5 5
    1 270
    2 90
    
    예상 출력
    5.00 10.00
    
    -10.00 5.00
    -5.00 10.00