정렬되지 않은 채로
시간 제한1초메모리 제한512 MB
서로 다른 n개의 값을 갖는 선형 합동 수열이 주어질 때, 정렬되지 않은 배열에서 이진 탐색으로 실제 찾을 수 있는 값의 개수를 센다.
문제
Ann Logan은 정수의 유한 수열에 관심이 많다. 그녀가 특히 흥미를 느끼는 것은 다음과 같은 형태의 수열 이다.
- 는 양의 정수 상수이다.
- 은 음이 아닌 정수 상수이다.
- 개의 값은 모두 서로 다르다.
예를 들어 , , , , 이면 수열은 이다(, 등). 처음 값 은 수열의 일부로 보지 않는다.
Ann은 임의의 정수 값이 이런 형태의 유한 수열에 나타나는지 빠르게 판별하고 싶어 한다. 이 주어졌을 때 그녀가 세운 계획은 다음과 같다.
- 수열 을 생성해 배열에 저장한다.
- 배열을 정렬한다.
- 관심 있는 각 정수에 대해 배열에서 이진 탐색을 수행한다.
Ann의 탐색 알고리즘은 가장 효율적이지는 않지만 이진 탐색에 익숙한 사람이라면 누구나 이해할 수 있을 만큼 단순하다. 각 단계에서 중간 위치 를 계산한 뒤, 그 위치의 값이 탐색 값 와 같은지 먼저 확인한다. 같지 않으면 가 위치의 값보다 엄격히 작은지 엄격히 큰지에 따라 탐색 범위를 좁힌다.
안타깝게도 Ann은 건망증이 심해 단계 목록을 잃어버렸다. 첫 단계와 마지막 단계는 기억해 냈지만, 이진 탐색을 하기 전에 배열을 정렬하는 것을 잊었다! 당연히도 정렬되지 않은 배열에 들어 있는 많은 값은 이진 탐색으로 찾을 수 없지만, 놀랍게도 일부 값은 찾을 수 있다. 위 예에서 4와 7은 Ann의 이진 탐색으로 찾을 수 있다. 여러 수열에 대해 몇 개의 값을 찾을 수 있을까? 틀리지 마라!
입력
입력은 다섯 정수 가 한 줄에 주어진다(, , ). 은 생성할 수열 의 길이이고, 은 수열을 생성하는 데 쓰는 상수이다. 생성된 수열의 모든 값은 서로 다름이 보장된다.
출력
Ann이 수열을 정렬하는 것을 잊었다고 가정했을 때, Ann의 이진 탐색으로 찾을 수 있는 수열 값의 개수를 출력한다.