回答編集履歴
1
追記
test
CHANGED
@@ -79,4 +79,55 @@
|
|
79
79
|
15143571行
|
80
80
|
"""
|
81
81
|
```
|
82
|
+
## 追記
|
82
83
|
|
84
|
+
C++で総数だけ数える雑なコード書いてみましたが、40程度でも数分かかって6901580871通りとはじき出されたので、50個ものパターンをじっさいに生成するのは現実的ではないと思います。
|
85
|
+
```C++
|
86
|
+
#include <stdio.h>
|
87
|
+
#include <string.h>
|
88
|
+
#include <stdlib.h>
|
89
|
+
#include <vector>
|
90
|
+
|
91
|
+
using namespace std;
|
92
|
+
|
93
|
+
const int TOTAL = 40;
|
94
|
+
const int MAX0 = 4;
|
95
|
+
const int MAX2 = 4;
|
96
|
+
|
97
|
+
long long nCount = 0;
|
98
|
+
|
99
|
+
void count( int aCount[], int aRet[])
|
100
|
+
{
|
101
|
+
if( aCount[0] <= 0 && aCount[1] <= 0 && aCount[2] <= 0){
|
102
|
+
nCount++;
|
103
|
+
return;
|
104
|
+
}
|
105
|
+
|
106
|
+
int pos = TOTAL - (aCount[0] + aCount[1] + aCount[2]);
|
107
|
+
for( int i = 0; i < 3; i++){
|
108
|
+
if( aCount[i] > 0){
|
109
|
+
int aCount_next[3];
|
110
|
+
memcpy( aCount_next, aCount, sizeof(aCount_next));
|
111
|
+
aCount_next[i]--;
|
112
|
+
aRet[pos] = i;
|
113
|
+
count(aCount_next, aRet);
|
114
|
+
}
|
115
|
+
}
|
116
|
+
}
|
117
|
+
|
118
|
+
int main( int argc, char *argv[])
|
119
|
+
{
|
120
|
+
int aRet[TOTAL];
|
121
|
+
for( int n0 = 0; n0 <= MAX0; n0++){
|
122
|
+
for( int n2 = 0; n2 <= MAX2; n2++){
|
123
|
+
int n1 = TOTAL - n0 - n2;
|
124
|
+
int aCount[3] = {n0, n1, n2};
|
125
|
+
printf("%d,%d,%d\n", aCount[0], aCount[1], aCount[2]);
|
126
|
+
count( aCount, aRet);
|
127
|
+
printf("%lld\n", nCount);
|
128
|
+
}
|
129
|
+
}
|
130
|
+
|
131
|
+
return 0;
|
132
|
+
}
|
133
|
+
```
|