背景
考虑一个(闭合的)杆链,每个杆的长度都是整数。有多少不同的无孔四角系统,你可以在给定链形成的?或者换句话说,对于给定的链,可以形成多少个与轴对齐的边的非自相交多边形?
让我们看一个例子。考虑由8条长度为1和2的杆组成的特定链,我们可以将其表示为[1, 1, 2, 2, 1, 1, 2, 2]。直到旋转和平移,只有8种可能的多米诺骨牌(我们会计算不同的反射):

第一个杆是深蓝色,然后我们以逆时针方向遍历多边形。
旋转感不影响上面示例中的结果。但是,让我们考虑另一条链,[3, 1, 1, 1, 2, 1, 1]它产生以下3个多氨基酸:

注意,我们不包括最后一个多米诺骨牌的反射,因为它需要顺时针遍历。
如果我们有一条相同长度的更灵活的链[1, 1, 1, 1, 1, 1, 1, 1, 1, 1],我们实际上将能够在其他一些多音色之间形成两种反射,总计为9:

挑战
给定链条的描述(以阵列或类似形式),可以按顺序确定杆(在旋转和平移的情况下)可以形成的不同多义氨基酸的数量,同时按逆时针方向绕周长。
请编写完整的程序,并包含用于编译的命令(如果适用),并从命令行运行代码。另请提供指向您所用语言的免费编译器/解释器的链接。
您的程序应从STDIN读取输入。第一行将包含的整数中号。接下来的M行将是测试用例,每个用例将是一个用空格分隔的杆长度列表。您的程序应将M行打印到STDOUT,每行由一个整数组成-可以形成的不同多氨基酸的数量。
您只能使用一个线程。
您的程序在任何时候都不得使用超过1 GB的内存。(这不是一个完全严格的限制,但是我将监视可执行文件的内存使用情况,并杀死任何持续使用超过1 GB或峰值明显超过此1GB的进程。)
为防止过多的预计算,您的代码不得超过20,000字节,并且不得读取任何文件。
您也不能针对所选的特定测试用例进行优化(例如,通过对结果进行硬编码)。如果我怀疑您这样做,我保留生成新基准集的权利。测试集是随机的,因此您的程序在这些测试集上的性能应代表其在任意输入下的性能。您唯一可以做的假设是杆长度的总和是偶数。
计分
我为N = 10、11,...,20根杆的链条提供了基准套件。每个测试集包含50条随机链,长度在1-4之间(含1和4)。
您的主要分数是程序在5分钟内(在我的计算机上,Windows 8下)完成完整测试集的最大N分。决胜局将是程序在该测试集上花费的实际时间。
如果有人击败最大的测试仪,我将继续增加更大的测试仪。
测试用例
您可以使用以下测试用例来检查实现的正确性。
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