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

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

금고

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

요약
단어와 각 바퀴의 회전 오프셋이 주어질 때, 모든 바퀴가 같은 단어를 표시하도록 만드는 최소 회전 횟수를 구한다.
난이도

보통10점 중 6점

유형
문자열, 구현, 누적 합, 수학
정답자
아직 제출이 없습니다

문제

바이트만은 오래된 금고에 전 재산을 보관한다. 이 금고의 자물쇠는 똑같이 생긴 바퀴 nn개로 이루어져 있고, 각 바퀴에는 mm개의 글자로 된 같은 단어가 빙 둘러 적혀 있다. 바퀴는 서로 독립적으로 돌릴 수 있어서, 각 바퀴를 mm가지 위치 중 하나에 맞출 수 있다. mm개의 모든 위치에서 모든 바퀴가 같은 글자를 보이면, 즉 모든 바퀴가 완전히 같은 단어를 나타내면 금고가 열린다.

바퀴 하나를 왼쪽이나 오른쪽으로 360/m360/m도 돌리는 데는 11초가 걸린다. 금고를 여는 데 필요한 최소 시간을 구하여라.

입력

첫째 줄에 두 정수 nn과 mm이 공백 하나로 구분되어 주어진다 (2≤n,m≤1 000 0002 \le n, m \le 1\,000\,000). 각각 자물쇠에 달린 바퀴의 수와 각 바퀴에 적힌 단어의 길이를 뜻한다.

둘째 줄에 길이가 mm인 단어 s1s2…sms_1 s_2 \dots s_m이 주어지며, 알파벳 대문자로만 이루어져 있다.

셋째 줄에 nn개의 정수 o1,o2,…,ono_1, o_2, \dots, o_n이 공백 하나로 구분되어 주어진다 (0≤oi<m0 \le o_i < m). oi=ko_i = k는 ii번째 바퀴가 기준 위치에서 왼쪽으로 kk칸 돌아가 있다는 뜻이며, 이때 그 바퀴는 sk+1sk+2…sms1s2…sks_{k+1} s_{k+2} \dots s_m s_1 s_2 \dots s_k를 나타낸다. 예를 들어 oi=0o_i = 0이면 그 바퀴는 전혀 돌아가 있지 않다.

출력

금고를 여는 데 필요한 최소 시간(초)을 정수 하나로 출력한다.

힌트

왼쪽으로 한 칸 돌리는 것과 오른쪽으로 한 칸 돌리는 것은 서로 반대 방향의 조작이다. 어떤 바퀴가 지금 OWIKSL을 나타내고 있다고 하자. 이 바퀴를 왼쪽으로 한 칸 돌리면 WIKSLO가 되고, 오른쪽으로 한 칸 돌리면 LOWIKS가 된다. 두 바퀴는 나타내는 단어가 완전히 같을 때에만 서로 맞춰진 것으로 본다. 따라서 단어에 반복되는 구조가 있으면 서로 다른 여러 회전이 같은 모습을 만들 수도 있다.

예제3

  1. 예제 1

    입력
    4 6
    SLOWIK
    2 0 3 5
    
    예상 출력
    6
    
  2. 예제 2

    입력
    3 4
    AAAA
    0 2 3
    
    예상 출력
    0
    
  3. 예제 3

    입력
    2 3
    ABC
    0 1
    
    예상 출력
    1