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

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

다이아몬드 핸즈

면접 대비

시간 제한2초메모리 제한512 MB

요약
여러 시점의 주가 차이가 주어질 때, 1일부터 d_n까지 +1일과 -1일이 이어지는 구간을 최소 개수로 복원하고, 불가능하면 -1을 출력한다.
난이도

보통10점 중 7점

유형
그리디, 구현, 수학, 구간
정답자
아직 제출이 없습니다

문제

"Diamond Hands" 기업은 길고 다사다난한 역사를 가지고 있다. 창립 이래로 성공적인 날과 그렇지 않은 날이 많이 있었다. 편의상 주가가 1(추상적인 단위)만큼 오른 날을 성공적인 날이라고 하자. 마찬가지로 주가가 1만큼 내린 날을 성공적이지 않은 날이라고 하자. 흔히 그렇듯이, 성공적인 날들은 긴 연속으로 이어지고, 성공적이지 않은 날들도 마찬가지다. 중간은 없다. 모든 날은 성공적이거나 성공적이지 않다.

이 기업에게 어떤 날이 성공적이었고 어떤 날이 성공적이지 않았는지 알아내고 싶다. 그러기 위해 역사적 주가 데이터를 얻었다. nn개의 쌍 (d_i,p_i)(d\_i, p\_i)은 주식을 발행한 지 d_id\_i일이 지난 후 시작 주가와의 차이가 p_ip\_i단위라는 뜻이다(p_ip\_i는 음수를 포함한 임의의 정수일 수 있다).

기업의 역사를 최소 개수의 성공적인 날 또는 성공적이지 않은 날의 연속으로 나타내거나, 데이터에 오류가 있어 불가능하다고 보고하라. 최소 개수의 연속을 이루는 답이 여러 개라면 아무거나 하나 출력하라.

입력

첫째 줄에 정수 nn이 주어진다(1≤n≤200 0001 \le n \le 200\,000). 다음 nn개의 줄에는 각각 두 정수 d_i  p_id\_i \; p\_i가 주어진다(1≤d_i≤1081 \le d\_i \le 10^8; −108≤p_i≤108-10^8 \le p\_i \le 10^8; 1≤i≤n−11 \le i \le n - 1인 모든 ii에 대해 d_i<d_i+1d\_i < d\_{i+1}).

출력

역사적 주가 데이터에 오류가 있으면 −1-1을 출력한다. 그렇지 않으면 첫째 줄에 연속의 개수 kk를 출력한다. 다음 kk개의 줄에는 성공적인 날 또는 성공적이지 않은 날의 연속을 설명한다. 각 줄에는 쌍 l_i  c_il\_i \; c\_i가 있어야 하며(1≤l_i≤1081 \le l\_i \le 10^8; c_i∈{+,-}c\_i \in \{\texttt{+}, \texttt{-}\}), 이는 다음 연속이 l_il\_i일 동안 지속되었고, c_i=+c\_i = \texttt{+}이면 성공적이었고 c_i=-c\_i = \texttt{-}이면 성공적이지 않았음을 뜻한다.

연속에 대한 설명은 주식을 발행한 날부터 d_nd\_n일까지 시간 순서대로 이루어져야 한다. 즉, 모든 l_il\_i의 합은 d_nd\_n과 같아야 한다.

힌트

첫 번째 예에서 처음 3일은 성공적이므로 2일 후 차이는 2이고, 3일 후 차이는 3이다. 다음 3일은 성공적이지 않으므로 5일 후 차이는 1이 되고, 6일 후 주가는 초기값으로 돌아온다. 마지막 7일째는 성공적이므로 7일 후 최종 차이는 1이다.

예제3

  1. 예제 1

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

    입력
    2
    3 -3
    7 -3
    
    예상 출력
    2
    5 -
    2 +
    
  3. 예제 3

    입력
    1
    1 0
    
    예상 출력
    -1