합이 가장 가까운 쌍 세기

n개의 정수와 목표값 v가 주어질 때, 합이 v에 가장 가까운 인덱스 쌍의 개수를 센다.

보통5정렬투 포인터배열해시맵면접 대비아직 제출이 없습니다시간 제한2초메모리 제한512 MB

문제

정수 nn개로 이루어진 수열 a1,a2,,ana_1, a_2, \dots, a_n과 정수 vv가 주어진다. i<ji < j인 두 원소의 쌍 (ai,aj)(a_i, a_j)를 모두 생각하자.

이 쌍 중에서 합 ai+aja_i + a_jvv에 가장 가까운 쌍, 즉 ai+ajv|a_i + a_j - v|를 최소로 만드는 쌍을 찾고, 그 최소 거리를 가지는 쌍이 몇 개인지 출력한다. 합이 vv와 같으면 거리는 00이다.

쌍은 값이 아니라 위치로 구분한다. 값이 같아도 인덱스가 다르면 서로 다른 쌍으로 센다.

입력

첫째 줄에 nn이 주어진다.

둘째 줄에 a1,a2,,ana_1, a_2, \dots, a_n이 공백으로 구분되어 주어진다.

셋째 줄에 vv가 주어진다.

출력

첫째 줄에 조건을 만족하는 쌍의 개수를 정수 하나로 출력한다.

제한

  • 1<n1061 < n \le 10^6
  • 모든 ii에 대해 104ai104-10^4 \le a_i \le 10^4
  • 104v104-10^4 \le v \le 10^4

힌트

예제에서 v=12v = 12는 어떤 쌍의 합으로도 만들 수 없지만 1313은 만들 수 있다. 예를 들어 2+11=132 + 11 = 13이고, v=12v = 12와의 거리는 11이다. 합이 1111인 쌍도 거리가 11이다. 합이 1111인 쌍은 2+92 + 9 두 개이고 합이 1313인 쌍은 2+112 + 115+85 + 8이므로 답은 44이다. 수열에 99가 두 번 나오므로 값이 같은 쌍 (2,9)(2, 9)를 두 번 센다는 점에 주의하라.