밧줄 접기

면접 대비

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

요약
밧줄 위 정수 위치에 매듭이 있을 때, 겹치는 구간의 모든 매듭이 다른 매듭으로 정확히 반사되는 접는 위치의 수를 센다.
난이도

보통10점 중 4점

유형
배열, 완전 탐색, 구현, 기하
정답자
아직 제출이 없습니다

문제

농부 John은 농장 일에 쓰는 길이 LL (1≤L≤10,0001 \le L \le 10{,}000)인 밧줄을 가지고 있습니다. 이 밧줄에는 서로 다른 정수 위치에 NN개 (1≤N≤1001 \le N \le 100)의 매듭이 묶여 있으며, 양 끝점(위치 00과 LL)에도 각각 매듭이 하나씩 있습니다.

John은 특정 지점에서 밧줄을 자기 자신 위로 접을 수 있습니다. 어떤 지점에서 접으면 밧줄의 한쪽이 반대쪽 위로 반사되어 겹칩니다. 두 가닥이 겹치는 모든 구간에서 한 가닥의 매듭이 반대쪽 가닥의 매듭과 정확히 일치하면, 그 접기를 좋은 접기라고 합니다.

정확히 말하면, 위치 ff (0<f<L0 < f < L)에서 접으면 위치 xx의 매듭은 위치 2f−x2f - x로 반사됩니다. 더 짧은 쪽의 길이를 d=min⁡(f, L−f)d = \min(f,\, L - f)라 하면 두 가닥은 구간 [f−d, f+d][f - d,\, f + d]에서 겹칩니다. 이 겹침 구간 안에 있는 모든 매듭 xx에 대해 그 반사 위치 2f−x2f - x에도 매듭이 있으면 좋은 접기입니다.

매듭 위치에서 접는 것은 허용되지만, 양 끝점에서 접는 것은 허용되지 않습니다. 겹침 구간 바깥, 즉 더 긴 쪽에 있는 여분의 매듭은 상관없습니다. John은 한 번에 한 번만 접습니다.

좋은 접기가 가능한 위치의 개수를 세어 주세요.

입력

  • 첫째 줄: 공백으로 구분된 두 정수 NN과 LL.
  • 2…N+12 \ldots N+1번째 줄: 각 줄에 0…L0 \ldots L 범위의 정수 하나, 즉 한 매듭의 위치. 이 위치들 중 두 개는 항상 00과 LL입니다.

출력

  • 첫째 줄: 좋은 접기가 가능한 위치의 개수 하나.

힌트

예를 들어 밧줄의 길이가 L=10L = 10이고 매듭이 0,2,4,6,100, 2, 4, 6, 10에 있으면, 좋은 접기 위치는 1,2,3,81, 2, 3, 8의 네 곳입니다.

  • 11에서 접기: 겹침 구간은 [0,2][0, 2]이고 매듭 00과 22가 서로 반사되어 일치합니다.
  • 22에서 접기: 겹침 구간은 [0,4][0, 4]이고 매듭 0,2,40, 2, 4가 22를 중심으로 대칭입니다.
  • 33에서 접기: 겹침 구간은 [0,6][0, 6]이고 매듭 0,2,4,60, 2, 4, 6이 33을 중심으로 대칭입니다.
  • 88에서 접기: 겹침 구간은 [6,10][6, 10]이고 매듭 66과 1010이 서로 반사되어 일치합니다(여분의 매듭 0,2,40, 2, 4는 더 긴 쪽에 있으므로 무시됩니다).

접는 위치는 반정수(정수의 절반)일 수도 있습니다. 짧은 쪽 끝의 매듭이 정수 매듭 위로 반사되어야 하므로, 모든 좋은 접기는 2f2f가 정수인 지점에서 일어납니다.

예제1

  1. 예제 1

    입력
    5 10
    0
    10
    6
    2
    4
    
    예상 출력
    4