랜덤 워크
시간 제한1초메모리 제한128 MB
서로 평행하지 않은 2차원 벡터 n개가 주어질 때, 각 벡터에 부호를 골라 합의 유클리드 길이가 최대가 되도록 한다.
문제
랜덤 워크(random walk)는 브라운 운동부터 도박까지 다양한 현상을 모형화하는 데 쓰인다. 예를 들어 동전을 던져 앞면 또는 뒷면에 돈을 거는 도박꾼은 매 턴마다 건 돈을 따거나 잃으며, 시간이 지남에 따라 도박꾼이 가진 돈의 양은 하나의 랜덤 워크가 된다. 매 턴 거는 금액이 다르더라도, 모든 턴을 이기면 가장 많은 돈을, 모든 턴을 지면 가장 적은 돈을 갖게 됨은 쉽게 알 수 있다.
여기서는 다음과 같은 2차원 변형을 생각한다. 서로 평행하지 않은, 0이 아닌 2차원 벡터 개 가 주어진다. 번째 단계에서 동전을 던져, 앞면이면 방향으로 만큼, 방향으로 만큼 이동하고, 뒷면이면 대신 , 만큼 이동한다. 개의 단계를 모두 마치면, 각 에 대해 출발점으로부터의 변위는 가 된다.
출발점에서 도달할 수 있는 최대 거리, 즉 을 구하라. 1차원에서는 쉽지만 2차원에서는 그리 간단하지 않다.
입력
입력은 여러 개의 테스트 케이스로 이루어진다. 각 테스트 케이스의 첫 줄에는 정수 ()이 주어진다. 이어지는 개의 줄에는 각각 를 나타내는 두 정수 와 가 주어지며, 각 좌표의 절댓값은 보다 작다. 인 줄은 입력의 끝을 나타내며 처리하지 않는다.
출력
각 테스트 케이스마다 다음 형식에 정확히 맞추어 한 줄을 출력한다.
Maximum distance = D.DDD meters.
여기서 D.DDD는 출발점으로부터의 최대 거리를 소수점 아래 셋째 자리까지 반올림한 값이다.