배경
(폐쇄 된) 막대 사슬을 고려하십시오. 각 막대의 길이는 정수입니다. 주어진 사슬로 몇 개의 별개의 홀이없는 폴리 아미노 를 형성 할 수 있습니까? 다시 말해, 주어진 체인으로 축이 정렬 된면을 가진 서로 다른 교차하지 않는 다각형을 몇 개나 만들 수 있습니까?
예를 봅시다. 길이 1과 2의 막대 8 개로 구성된 특정 체인을 생각해 보자 [1, 1, 2, 2, 1, 1, 2, 2]
. 회전 및 변환까지는 가능한 8 개의 폴리 아미노가 있습니다 (우리는 다른 반사를 계산합니다) :
이 첫 번째 막대는 진한 파란색이며 시계 반대 방향으로 다각형을 가로지 릅니다 .
회전 감각은 위 예의 결과에 영향을 미치지 않습니다. 그러나 [3, 1, 1, 1, 2, 1, 1]
다음과 같은 3 가지 폴리 아미노를 생성하는 다른 사슬을 고려 하십시오.
시계 방향 순회가 필요하기 때문에 마지막 polyomino를 반영 하지 않습니다 .
길이가 더 유연한 체인을 가졌다면 [1, 1, 1, 1, 1, 1, 1, 1, 1, 1]
, 실제로는 다른 폴리오 니노 사이에 총 9 개의 반사를 형성 할 수 있습니다.
도전
체인에 대한 설명이 배열 또는 유사하게 제공되면 둘레를 시계 반대 방향으로 돌면서 막대 를 순서대로 사용하여 형성 할 수있는 별개의 폴리 아미노산 수 (회전 및 변환까지)를 결정하십시오 .
전체 프로그램을 작성하고 컴파일 할 수있는 명령을 포함하고 (해당되는 경우) 명령 행에서 코드를 실행하십시오. 귀하의 언어에 대한 무료 컴파일러 / 통역사에 대한 링크도 포함하십시오.
프로그램은 STDIN의 입력을 읽어야합니다. 첫 번째 줄에는 정수 M 이 포함됩니다 . 다음 M 라인은 테스트 케이스가 될 것이며, 각각은 공백으로 분리 된로드 길이 목록이 될 것입니다. 프로그램은 M 행을 STDOUT에 인쇄해야하며 , 각 행은 단일 정수로 구성됩니다.
단일 스레드 만 사용해야합니다.
프로그램은 언제든지 1GB 이상의 메모리를 사용해서는 안됩니다. (이것은 완전히 엄격한 제한은 아니지만 실행 파일의 메모리 사용량을 모니터링하고 지속적으로 1GB 이상을 사용하거나 그보다 크게 급등하는 프로세스를 종료합니다.)
과도한 양의 사전 계산을 방지하려면 코드가 20,000 바이트를 넘지 않아야하며 파일을 읽지 않아야합니다.
또한 선택한 특정 테스트 사례에 맞게 최적화해서는 안됩니다 (예 : 결과 하드 코딩). 귀하가 의심하는 경우 새로운 벤치 마크 세트를 생성 할 권리가 있습니다. 테스트 세트는 무작위이므로 그에 대한 프로그램의 성능은 임의의 입력에 대한 성능을 대표해야합니다. 당신이 할 수있는 유일한 가정은 막대 길이의 합이 균일하다는 것입니다.
채점
N = 10, 11, ..., 20 개의 체인에 대한 벤치 마크 세트 를 제공했습니다 . 각 테스트 세트에는 길이가 1에서 4 사이 인 랜덤 체인 50 개가 포함됩니다.
1 차 점수는 프로그램이 전체 테스트 세트를 5 분 이내에 완료하는 데 가장 큰 N 입니다 (컴퓨터에서 Windows 8의 경우). 타이 브레이커는 해당 테스트 세트에서 프로그램이 실제로 소요 한 시간입니다.
누구든지 가장 큰 테스트 세트를 이길 경우 더 큰 테스트 세트를 계속 추가 할 것입니다.
테스트 사례
다음 테스트 사례를 사용하여 구현의 정확성을 확인할 수 있습니다.
Input Output
1 1 0
1 1 1 1 1
1 1 1 1 1 1 1
1 1 1 1 1 1 1 1 3
1 1 1 1 1 1 1 1 1 1 9
1 1 1 1 1 1 1 1 1 1 1 1 36
1 1 1 1 1 1 1 1 1 1 1 1 1 1 157
1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 758
1 1 2 2 1 1 2 2 8
1 1 2 2 1 1 2 2 1 1 23
1 1 2 2 1 1 2 2 1 1 2 2 69
1 2 1 2 1 2 1 2 3
1 2 1 2 1 2 1 2 1 2 1 2 37
1 2 3 2 1 2 3 2 5
1 2 3 2 1 2 3 2 1 2 3 2 23
3 1 1 1 2 1 1 3
1 2 3 4 5 6 7 1
1 2 3 4 5 6 7 8 3
1 2 3 4 5 6 7 8 9 10 11 5
2 1 5 3 3 2 3 3 4
4 1 6 5 6 3 1 4 2
3 5 3 5 1 4 1 1 3 5
1 4 3 2 2 5 5 4 6 4
4 1 3 2 1 2 3 3 1 4 18
1 1 1 1 1 2 3 3 2 1 24
3 1 4 1 2 2 1 1 2 4 1 2 107
2 4 2 4 2 2 3 4 2 4 2 3 114
리더 보드
User Language Max N Time taken (MM:SS:mmm)
1. feersum C++ 11 19 3:07:430
2. Sp3000 Python 3 18 2:30:181