전산생물학
시간 제한5초메모리 제한128 MB
길이 m인 단어의 모든 순환 회전이 s에 나타날 때, s에서 그 회전들이 나타나는 총 횟수를 최대로 하는 값을 각 질의마다 구한다.
문제
바이트아저씨(Byteasar)는 바이트랜드 전산생물학 연구소에서 일한다. 방금 길이가 인 유전체(genome) 문자열을 받았고, 그 안에서 가장 자주 나타나는 순환 조각을 찾으려 한다.
이 문자열은 대문자 알파벳으로 이루어진 단어 으로 나타낸다. 어떤 단어의 순환 회전(cyclic rotation) 은 맨 뒤 글자를 맨 앞으로 옮기는 연산을 (필요하면 여러 번) 적용해 얻는 단어다. 예를 들어 ABAABA 의 서로 다른 순환 회전은 ABAABA, BAABAA, AABAAB 세 가지다. 단어 가 단어 의 부분단어(subword) 라는 것은, 가 에서 연속한 글자들의 한 덩어리로 나타난다는 뜻이다.
단어 가 의 순환 조각(cyclic fragment) 이라는 것은, 의 모든 순환 회전이 의 부분단어라는 뜻이다. 이러한 에 대해 에서의 순환 출현 횟수는, 의 서로 다른 순환 회전들이 에 나타나는 횟수의 총합으로 정의한다.
각 질의로 주어지는 길이 에 대해, 길이가 인 의 순환 조각이 가질 수 있는 순환 출현 횟수의 최댓값을 구하라. 길이가 인 순환 조각이 존재하지 않으면 답은 0이다.
입력
첫째 줄에 두 정수 과 가 주어진다 (, ). 각각 유전체 문자열의 길이와 질의의 개수를 뜻한다. 둘째 줄에는 대문자 알파벳 개로 이루어진 단어 가 주어진다. 이어지는 개의 줄에는 각 줄마다 정수 ()가 하나씩 주어지며, 그 질의에서 살펴볼 순환 조각의 길이를 뜻한다.
출력
개의 줄을 출력한다. 번째 줄에는 길이가 인 의 순환 조각들 중 순환 출현 횟수의 최댓값을 정수 하나로 출력한다 (존재하지 않으면 0).
힌트
가 AABAABACDABAABAA 인 경우를 보자. 길이 6에서 순환 조각 AABAAB 은 서로 다른 순환 회전 세 개를 가지며, 이들은 에서 모두 합쳐 4번 나타난다: AABAAB 으로 1번, ABAABA 로 2번, BAABAA 로 1번. 길이 6짜리 어떤 순환 조각도 이보다 많지 않으므로 답은 4다. 길이 3에서는 순환 조각 AAB 이 회전 AAB, ABA, BAA 를 통해 모두 합쳐 10번 나타나며, 이것이 최댓값이다.