Moo Sick

면접 대비

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

요약
길이 C인 연속 구간마다 값을 정렬하고 최솟값을 뺀 모양이 주어진 화음의 모양과 같은 시작 위치를 모두 찾는다.
난이도

보통10점 중 4점

유형
배열, 정렬, 슬라이딩 윈도우, 구현
정답자
아직 제출이 없습니다

문제

소들은 거의 모든 종류의 음악을 좋아합니다. "거의"라고 한 이유는, 위대한 소 작곡가 볼프강 아마데우스 무차르트(Moozart)가 특정 화음 하나가 소를 병들게 한다는 사실을 발견했기 때문입니다. 이 화음은 되새김 7화음(ruminant seventh chord)이라 불리며, 그래서 소를 위한 작곡에서는 보통 이 화음을 피합니다.

이런 사정을 모르는 농부 존(Farmer John)은 자신이 가장 좋아하는 노래를 외양간 스피커로 틀었습니다. 소들이 얼마나 아플지 가늠하기 위해, 이 노래에 등장하는 모든 되새김 7화음을 찾아내는 것이 여러분의 과제입니다.

노래는 NN개의 음표로 이루어진 수열이며(1≤N≤200001 \le N \le 20000), 각 음표는 [1,88][1, 88] 범위의 정수입니다. 되새김 7화음은 서로 다른 CC개의 음표로 정의되고(1≤C≤101 \le C \le 10), 이 음표들도 [1,88][1, 88] 범위의 정수입니다. 이 화음은 조옮김(모든 음표에 같은 값을 더하는 것)과 순서 바꾸기에 대해 변하지 않습니다. 예를 들어 4 6 7이 되새김 7화음이라면, 3 5 6(−1-1만큼 조옮김), 6 8 9(+2+2만큼 조옮김), 6 4 7(순서 바꿈), 5 3 6(조옮김과 순서 바꿈)도 모두 되새김 7화음입니다.

노래에서 화음이 "나타난다"는 것은, 어떤 조옮김과 순서 바꾸기를 거쳐 그 화음과 같아지는 연속된 CC개 음표의 구간을 뜻합니다. 이런 구간은 시작 위치로 유일하게 식별됩니다. 노래에 등장하는 모든 되새김 7화음의 시작 위치를 구하세요.

입력

  • 첫째 줄: 정수 NN.
  • 둘째 줄부터 N+1N+1째 줄까지: 노래의 NN개 음표를 한 줄에 하나씩.
  • N+2N+2째 줄: 정수 CC.
  • N+3N+3째 줄부터 N+2+CN+2+C째 줄까지: 되새김 7화음의 한 예시가 되는 CC개 음표를 한 줄에 하나씩. 이 음표들의 모든 조옮김과 순서 바꾸기도 되새김 7화음입니다.

출력

  • 첫째 줄: 노래에 등장하는 되새김 7화음의 개수 KK. 서로 다른 등장 구간은 겹칠 수 있습니다.
  • 둘째 줄부터 K+1K+1째 줄까지: 각 등장 구간의 시작 인덱스(인덱스 11은 첫 음표, 인덱스 NN은 마지막 음표)를 오름차순으로 출력합니다.

힌트

연속된 CC개 음표 구간이 화음인지 확인하려면, 그 구간을 정렬한 뒤 각 음표에서 가장 작은 음표 값을 빼세요. 그러면 조옮김과 순서 바꾸기에 영향을 받지 않는 "모양"이 나옵니다. 화음도 같은 방식으로 모양을 구했을 때, 구간의 모양이 화음의 모양과 정확히 일치하면 그 구간은 되새김 7화음입니다. 모든 시작 위치에서 등장을 세기 때문에, 두 등장 구간이 서로 겹칠 수도 있습니다.

예제3

  1. 예제 1

    입력
    6
    1
    8
    5
    7
    9
    10
    3
    4
    6
    7
    
    예상 출력
    2
    2
    4
    
  2. 예제 2

    입력
    3
    5
    5
    5
    1
    40
    
    예상 출력
    3
    1
    2
    3
    
  3. 예제 3

    입력
    5
    1
    2
    3
    4
    5
    2
    10
    11
    
    예상 출력
    4
    1
    2
    3
    4