아직 만들고 있는 페이지입니다.

이 페이지는 아직 만드는 중입니다. 보이는 내용은 바뀔 수 있습니다.

주가 예측

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

요약
패턴 수열 x와 상대 순위 패턴이 같은(순서 동형인) 길이 m의 윈도가 y에서 시작하는 모든 위치를 찾는다.
난이도

어려움10점 중 9점

유형
문자열 매칭, 정렬, 슬라이딩 윈도우, 해시맵
정답자
아직 제출이 없습니다

문제

김 씨는 주식 시장 분석가다. 최근 그는 여러 회사의 주가 차트를 보다가 흥미로운 사실을 발견했다. 나흘 연속으로 오른 주식은 대부분 다음 날 하락했다. 또한, 닷새째에 하락한 주가는 상승세였던 나흘 동안의 주가 중 둘째 날과 셋째 날 가격 사이에 위치하는 경우가 많았다. 예를 들어 A 회사의 주가가 나흘 연속으로 500원, 560원, 600원, 680원이었고, A 회사의 닷새째 주가가 580원이었다. 또한 B 회사의 주가가 나흘 연속으로 1,000원, 1,200원, 1,400원, 1,700원이었고, B 회사의 닷새째 주가가 1,350원이었다.

김 씨는 이전 주가 수열에서 최근 며칠간의 가격 변동 패턴과 일치하는 부분을 찾으면 다음 날의 주가를 상당히 정확하게 예측할 수 있다고 생각한다. 그는 또한 두 주가 수열의 상대 순위가 같으면 차트에서의 모양도 비슷하게 보이므로, 실제 가격보다 주가 수열에서의 상대 순위가 더 중요하다고 생각한다. 위 예에서 A 회사의 닷새 연속 주가 500원, 560원, 600원, 680원, 580원은 다섯 수 중 500이 가장 작고, 560이 두 번째로 작고, 600이 네 번째로 작은 식이므로 (1,2,4,5,3)(1, 2, 4, 5, 3)으로 나타낼 수 있다. 또한 B 회사의 닷새 연속 주가 1,000원, 1,200원, 1,400원, 1,700원, 1,350원도 같은 이유로 (1,2,4,5,3)(1, 2, 4, 5, 3)으로 나타낼 수 있다. 두 회사의 상대 순위가 같고, 그림 K.1에서 보듯이 닷새 연속 차트도 매우 비슷하게 보인다.

그림 K.1 A와 B 회사의 닷새 연속 차트

김 씨는 두 수열의 같은 위치에 있는 모든 상대 순위가 같으면 두 수열이 일치한다고 보기로 했다. 김 씨는 길이가 같은 두 수열의 R-match를 다음과 같이 정의했다. 길이가 같은 두 정수 수열 x=(x1,⋯ ,xm)x = (x_1, \cdots , x_m)과 y=(y1,⋯ ,ym)y = (y_1, \cdots , y_m)은, 각 ii (1≤i≤m1 ≤ i ≤ m)에 대해 xx에서의 xix_i의 순위와 yy에서의 yiy_i의 순위가 같을 때 그리고 그때만 R-match이다. 다음으로 그는 R-패턴 매칭 문제를 다음과 같이 정의했다. 길이 mm인 정수 수열 xx와 길이 nn인 정수 수열 yy (m≤nm ≤ n)가 주어질 때, xx와 (yi,⋯ ,yi+m−1)(y_i ,\cdots , y_{i+m-1})이 R-match가 되는 yy의 모든 위치 ii를 찾는다. 예를 들어 x=(33,40,22,40,41,28)x = (33, 40, 22, 40, 41, 28)이고 y=(10,20,16,27,32,12,32,33,20,25,15,25,31,17)y = (10, 20, 16, 27, 32, 12, 32, 33, 20, 25, 15, 25, 31, 17)일 때, xx와 (y4,⋯ ,y9)(y_4, \cdots , y_9)는 R-match이다. 또한 xx와 (y9,⋯ ,y14)(y_9, \cdots , y_{14})도 R-match이다.

길이 mm인 정수 수열 xx와 길이 nn인 정수 수열 yy (m≤nm ≤ n)가 주어질 때, xx와 yy에 대한 R-패턴 매칭 문제를 푸는 프로그램을 작성하시오.

입력

프로그램은 표준 입력에서 읽는다. 입력은 두 정수 mm과 nn (1≤m≤10,0001 ≤ m ≤ 10,000, 1≤n≤1,000,0001 ≤ n ≤ 1,000,000, m≤nm ≤ n)이 있는 한 줄로 시작한다. 여기서 mm은 xx의 길이이고 nn은 yy의 길이이다. 둘째 줄에는 xx의 mm개 정수가 차례로 주어진다. 셋째 줄에는 yy의 nn개 정수가 차례로 주어진다. xx와 yy의 각 정수는 11부터 10910^9까지이다.

출력

프로그램은 표준 출력에 쓴다. 정확히 한 줄을 출력한다. 그 줄에는 xx와 (yi,⋯ ,yi+m−1)(y_i ,\cdots , y_{i+m-1})이 R-match가 되는 yy의 모든 위치 ii가 들어 있어야 한다. 각 위치는 증가하는 순서로 나와야 한다. 그러한 위치가 없으면 0을 출력한다.

예제3

  1. 예제 1

    입력
    5 12
    500 560 600 680 580
    30 25 40 60 70 90 65 30 35 50 55 40
    
    예상 출력
    3 8
    
  2. 예제 2

    입력
    5 15
    1000 1200 1400 1700 1350
    1 2 3 4 5 6 7 8 7 6 5 4 3 2 1
    
    예상 출력
    0
    
  3. 예제 3

    입력
    6 14
    33 40 22 40 41 28
    10 20 16 27 32 12 32 33 20 25 15 25 31 17
    
    예상 출력
    4 9