거울

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

요약
시작 위치와 N개의 거울이 주어질 때, 각 거울을 정확히 한 번씩 사용해 점대칭으로 이동하며 최종 위치의 최댓값을 구한다.
난이도

보통10점 중 6점

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

문제

당신은 수직선 위에서 게임을 하고 있다. 당신의 캐릭터는 위치 ss에 있으며, 수직선 위에는 NN개의 거울이 배치되어 있다. 각 거울의 위치는 왼쪽부터 A_1≤A_2≤⋯≤A_NA\_1 ≤ A\_2 ≤ \cdots ≤ A\_N으로 나타낼 수 있다. 한 위치에 여러 개의 거울이 있을 수도 있다.

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

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

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

입력

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

둘째 줄에는 각 거울의 위치 A_1,A_2,⋯ ,A_NA\_1 , A\_2 ,\cdots , A\_N이 공백으로 구분되어 주어진다.

출력

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

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

제한

  • 주어지는 모든 수는 정수이다.
  • 1≤N≤200,0001 ≤ N ≤ 200\\, 000
  • −109≤s≤109−10^9 ≤ s ≤ 10^9
  • −109≤A_1≤A_2≤⋯≤A_N≤109−10^9 ≤ A\_1 ≤ A\_2 ≤ \cdots ≤ A\_N ≤ 10^9

예제4

  1. 예제 1

    입력
    2 0
    -1 2
    
    예상 출력
    6
    
  2. 예제 2

    입력
    6 3
    -4 -2 2 6 8 9
    
    예상 출력
    57
    
  3. 예제 3

    입력
    9 9
    0 1 3 3 4 5 8 9 10
    
    예상 출력
    49
    
  4. 예제 4

    입력
    1 1000000000
    -999999999
    
    예상 출력
    -2999999998