공들의 리듬게임

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

요약
직선 위에서 왼쪽, 정지, 오른쪽 상태의 공들이 충돌하며 정면 충돌은 1점, 정지한 공과의 충돌은 2점, 세 공이 동시에 부딪히면 5점을 얻을 때 최종 총점을 구한다.
난이도

어려움10점 중 8점

유형
시뮬레이션, 정렬, 구현
정답자
아직 제출이 없습니다

문제

무한히 긴 직선 위에 공 NN개가 놓여 있다. 각 공은 정지해 있거나, 왼쪽으로 움직이거나, 오른쪽으로 움직인다. 초기 공들의 위치는 모두 다르다.

리듬게임 장인인 현제는 공들이 계속 움직이다가 다른 공과 충돌하는 모습을 보며 일정한 리듬이 있다고 생각하다 게임을 만들었다. 처음에는 00점으로 시작하며, 공들끼리 충돌할 때 다음과 같이 점수를 얻고 공들의 상태가 바뀐다.

  • 왼쪽으로 움직이던 공과 오른쪽으로 움직이던 공이 충돌하면, 두 공 모두 진행 방향이 반대로 바뀌게 된다. 이 경우 11점을 얻는다.

  • 움직이던 공과 정지해 있던 공이 충돌하면, 움직이던 공은 그 자리에 정지하며, 정지해 있던 공은 움직이던 공이 이동하던 방향으로 움직인다. 이 경우 22점을 얻는다.

​​​​​​​

  • 왼쪽으로 움직이던 공과 정지해 있던 공, 오른쪽으로 움직이던 공이 동시에 충돌하면, 왼쪽으로 움직이던 공과 오른쪽으로 움직이던 공은 모두 진행 방향이 반대로 바뀌게 되며, 정지해 있던 공은 계속 정지해 있는다. 이 경우 55점을 얻는다.

​​​​​​​

한 번의 충돌이 여러 조건을 만족할 경우, 점수가 가장 높은 조건만 적용된다.

공이 더 이상 충돌하지 않을 만큼의 시간이 지났을 때 총점을 구해보자. 여기서 총점은 얻은 점수의 합이다.

움직이는 공들은 모두 11의 속력을 유지하며, 충돌 이후 새로 움직이는 공의 속력도 마찬가지이다. 공은 길이나 부피가 무시할 만큼 작아 없다고 가정하며, 충돌을 제외하고는 공의 운동 방향, 속력 등의 상태가 유지된다.

입력

첫 번째 줄에 공의 개수 NN이 주어진다. (1≤N≤500,000)(1\le N\le 500\\,000)

다음 NN줄에 걸쳐 각 공의 위치와 초기 상태를 나타내는 정수 a_ia\_i와 d_id\_i가 공백으로 구분되어 주어진다. (∣a_i∣≤1018;(\lvert a\_i\rvert\le 10^{18}; ∣d_i∣≤1)\lvert d\_i\rvert\le 1)

a_ia\_i는 직선 위의 공의 좌표이며, d_id\_i에 따라 초기 상태는 다음과 같다.

  • d_i=0d\_i=0: 정지해 있다.
  • d_i=−1d\_i=-1: 왼쪽으로 움직인다.
  • d_i=1d\_i=1: 오른쪽으로 움직인다.

모든 공들의 위치는 다르다.

출력

공이 더 이상 충돌하지 않을 만큼의 시간이 지났을 때 총점을 출력한다.

예제4

  1. 예제 1

    입력
    2
    -4 -1
    5 1
    
    예상 출력
    0
    
  2. 예제 2

    입력
    2
    -4 1
    5 -1
    
    예상 출력
    1
    
  3. 예제 3

    입력
    3
    -1 1
    0 0
    1 -1
    
    예상 출력
    5
    
  4. 예제 4

    입력
    4
    4 1
    5 0
    6 0
    8 -1
    
    예상 출력
    9