만드는 중입니다

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

텍스트 편집기

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

요약
각 줄의 길이가 주어질 때, 방향키로 커서를 시작 위치에서 목표 위치까지 옮기는 최소 입력 횟수를 구합니다.
난이도

어려움10점 중 9점

유형
최단 경로, 그리디, 배열
정답자
아직 제출이 없습니다

문제

Robert는 CEOI 2024에 참가하고 있다. 그날 가장 어려운 문제의 풀이를 거의 마쳤고, 100점을 받을 것이라고 확신한다. 다만 작은 오타가 하나 있다. 2008년부터 써 온 마우스가 마침내 고장 나서 전혀 반응하지 않는다. 그래서 키보드의 방향키만으로 오타 위치까지 커서를 옮겨야 한다.

Robert의 프로그램은 길이가 l1,l2,…,lNl_1, l_2, \ldots, l_N인 NN개의 줄로 이루어져 있다. Robert는 항상 빈 줄로 프로그램을 끝내므로 lN=0l_N = 0이다. 커서는 두 문자 사이, 줄의 시작, 줄의 끝에 놓일 수 있다. 따라서 ii번째 줄에는 li+1l_i + 1개의 커서 위치(열)가 있으며, 1번부터 li+1l_i + 1번까지 번호가 붙는다. 예를 들어 2번째 줄의 6번 열에 놓인 커서는 그 줄의 다섯 번째 문자 뒤에 있다.

Robert는 커서를 sls_l번째 줄 scs_c번 열에서 ele_l번째 줄 ece_c번 열로 옮기려 한다. 이때 필요한 키 입력 횟수의 최솟값을 구하라.

좌우 방향키는 단순하다. 왼쪽 키는 커서를 이전 열로 옮긴다. 다만 커서가 줄의 시작에 있으면 이전 줄의 끝으로 옮긴다. 오른쪽 키는 커서를 다음 열로 옮긴다. 다만 커서가 줄의 끝에 있으면 다음 줄의 시작으로 옮긴다. 파일의 맨 처음에서 왼쪽 키를 누르거나 파일의 맨 끝에서 오른쪽 키를 누르면 아무 효과가 없다.

상하 방향키는 조금 더 복잡하다. 위쪽 키는 커서를 이전 줄로, 아래쪽 키는 다음 줄로 옮기며, 열 번호는 바뀌지 않는다. 다만 새 줄의 길이를 넘어서게 되면 커서는 그 줄의 끝으로 옮겨간다. 위쪽 또는 아래쪽 키로 존재하지 않는 줄에 가려고 하면 커서는 움직이지 않는다.

입력

첫 번째 줄에 Robert 풀이의 줄 수 정수 NN이 주어진다.

두 번째 줄에는 초기 커서 위치를 나타내는 정수 sls_l과 scs_c가 주어진다.

세 번째 줄에는 목표 커서 위치를 나타내는 정수 ele_l과 ece_c가 주어진다.

네 번째 줄에는 각 줄의 길이를 나타내는 정수 l1,l2,…,lNl_1, l_2, \ldots, l_N이 공백으로 구분되어 주어진다.

출력

커서를 (sl,sc)(s_l, s_c)에서 (el,ec)(e_l, e_c)로 옮기는 데 필요한 키 입력 횟수의 최솟값을 한 줄에 정수 하나로 출력한다.

제한

1≤N≤1061 \leq N \leq 10^6

1≤i≤N1 \leq i \leq N인 각 ii에 대해 0≤li≤1090 \leq l_i \leq 10^9

lN=0l_N = 0

1≤sl,el≤N1 \leq s_l, e_l \leq N

1≤sc≤lsl+11 \leq s_c \leq l_{s_l} + 1

1≤ec≤lel+11 \leq e_c \leq l_{e_l} + 1

예제2

  1. 예제 1

    입력
    5
    3 1
    2 8
    7 10 9 9 0
    
    예상 출력
    3
    
  2. 예제 2

    입력
    5
    1 20
    3 25
    25 10 40 35 0
    
    예상 출력
    16