period문자열이 어떤 부분이 오버행 무시 자체 일치하도록 스트링의 최단 비제로 시프트된다. 예를 들어 abcabcabperiod가 3있습니다. 관례 적으로 우리는 그러한 시프트가 없다면 문자열의 길이는 길이와 같다고 말합니다. 기간 따라서 abcdeIS 5및 기간 a입니다 1.
보다 공식적인 용어로, 문자열의 기간은 (에서 색인화 )가 되도록 S최소 입니다.i > 0S[1,n-i] == S[i+1,n]1
두 길이의 거듭 제곱의 주어진 문자열 S에 대해, 우리는 두 길이의 거듭 제곱의 모든 접두사의주기를 계산합니다. 예를 들어을 고려하십시오 S = abcabcab. 우리가 계산할 기간은 다음과 같습니다.
'a', 1
'ab', 2
'abca', 3
'abcabcab', 3
실제로 마침표 배열을 출력합니다 [1, 2, 3, 3].
주어진 양의 2의 제곱에 n대해 가능한 모든 이진 문자열을 고려하십시오 S. 이진 문자열은 단순히 1s와 0s의 문자열 이므로 2^n이러한 문자열 (즉 2, 거듭 제곱 n)이 있습니다. 각각에 대해이 기간 배열을 계산할 수 있습니다.
문제는
n입력으로 (2의 거듭 제곱) 코드를 작성 하고 그러한 배열이 얼마나 많은지를 계산하는 것입니다.
이에 대한 답변 n = 1, 2, 4, 8, 16, 32, 64, 128은 다음과 같습니다.
1, 2, 6, 32, 320, 6025, 216854, 15128807
고유 한 기간 배열의 전체 세트 n = 4는 다음과 같습니다.
1, 1, 1
1, 1, 3
1, 1, 4
1, 2, 2
1, 2, 3
1, 2, 4
점수
Ubuntu를 실행하는 컴퓨터에서 10 분 동안 코드를 실행합니다. 귀하의 점수는 n해당 시간에 코드가 종료되는 최대 점수입니다 . 동점 인 경우, 가장 큰 공동으로 가장 n빠른 답이 이깁니다. 타이밍이 1 초 이내에 동점 인 경우 첫 번째 답변이 승리합니다.
언어와 라이브러리
원하는 언어와 라이브러리를 사용할 수 있습니다. 가능하다면 리눅스에서 코드를 실행 / 컴파일하는 방법에 대한 자세한 설명을 포함하십시오 .`
코드는 실제로 미리 계산 된 값만 출력하는 것이 아니라 답변을 계산해야합니다.
주요 항목
- 2 분 21초 대한 N = 128 의 C 번호 피터 테일러
- isaacg의 Rust 에서 n = 32 에 대해 9 초
n한다면 수락 하시겠습니까? 하드 코딩과 실제 컴퓨팅의 경계가 어디에 있는지 잘 정의되어 있지 않습니다.
abcab입니다. 마지막 3 글자를 제외한 모든 문자는 abcab입니다. 일치하며 더 적은 수의 문자를 제거하면 일치하지 않습니다.