Skip to content

거울

B51200
한국어

Language

Contribute a translation
Time limit
1000 ms
Memory limit
1024 MB
Submissions
0
Correct
0
Solved by
0
AC rate

Statement

당신은 수직선 위에서 게임을 하고 있다. 당신의 캐릭터는 위치 $s$에 있으며, 수직선 위에는 $N$개의 거울이 배치되어 있다. 각 거울의 위치는 왼쪽부터 $A_1 \le A_2 \le \cdots \le A_N$으로 나타낼 수 있다. 한 위치에 여러 개의 거울이 있을 수도 있다.

당신은 거울을 사용해 캐릭터의 위치를 바꿀 수 있다. 이때, 거울을 사용하면 캐릭터의 위치는 거울을 기준으로 점대칭인 지점으로 이동한다. 즉, 당신의 캐릭터가 위치 $a$에 있을 때 위치 $b$에 있는 거울을 사용하면 당신의 캐릭터는 위치 $2b-a$로 이동한다.

$N$ 개의 거울은 정확히 한 번씩 사용되어야 한다. 즉, 한 거울을 사용하지 않고 무시할 수는 없으며, 한 거울을 두 번 이상 사용할 수도 없다. 각 거울을 모두 정확히 한 번씩 사용해야 하는 것을 제외하고는, 거울은 당신이 원하는 아무 순서대로 사용할 수 있다.

당신은 이 조건하에서 캐릭터의 위치의 최댓값을 계산하여 출력해야 한다.

Constraints

  • 주어지는 모든 수는 정수이다.
  • $1 \le N \le 200\,000$
  • $-10^9 \le s \le 10^9$
  • $-10^9 \le A_1 \le A_2 \le \cdots \le A_N \le 10^9$

Subtasks

  1. (7점) $N \le 2$.
  2. (25점) $N$은 짝수, $A_1 = A_2 = \cdots = A_{N/2} < s < A_{N/2+1} = A_{N/2+2} = \cdots = A_{N}$.
  3. (19점) $N$은 짝수, $A_{N/2} < s < A_{N/2+1}$.
  4. (49점) 추가 제약 조건 없음.

Input

첫째 줄에는 거울의 수 $N$과 당신의 위치 $s$가 공백으로 구분되어 주어진다.

둘째 줄에는 각 거울의 위치 $A_1, A_2, \cdots, A_N$이 공백으로 구분되어 주어진다.

Output

$N$개의 거울을 모두 정확히 한 번씩 사용했을 때 캐릭터의 최종 위치의 최댓값을 출력한다.

답이 커질 수 있으므로 일부 프로그래밍 언어에서는 64비트 정수 변수(long long)를 사용해야 할 수도 있음에 유의하라.

Examples

Sample input 1
2 0
-1 2
Sample output 1
6
Sample input 2
1 1000000000
-999999999
Sample output 2
-2999999998
Sample input 3
6 3
-4 -2 2 6 8 9
Sample output 3
57
Sample input 4
9 9
0 1 3 3 4 5 8 9 10
Sample output 4
49

Tags

No tags yet

Source