Skip to content

Commit 0a33796

Browse files
committed
atcoder/abc185C (feedback from editorial)
1 parent 29850e7 commit 0a33796

File tree

1 file changed

+5
-49
lines changed

1 file changed

+5
-49
lines changed

atcoder/abc185/C/main.cpp

Lines changed: 5 additions & 49 deletions
Original file line numberDiff line numberDiff line change
@@ -1,52 +1,5 @@
11
#include <bits/stdc++.h>
22

3-
template<uint64_t MOD = std::numeric_limits<uint64_t>::max()>
4-
class CombinationPascal {
5-
size_t N;
6-
std::vector<std::vector<uint64_t>> comb;
7-
8-
public:
9-
// Time: O(N^2)
10-
CombinationPascal(
11-
size_t const N = 1000
12-
)
13-
{
14-
build(N);
15-
}
16-
// Time: O(N^2)
17-
void build(size_t const N) {
18-
this->N = N;
19-
comb.assign(N + 1, std::vector<uint64_t>(N + 1, 0));
20-
comb[0][0] = 1;
21-
for (size_t n = 1; n <= N; ++n) {
22-
comb[n][0] = 1;
23-
for (size_t k = 1; k <= N; ++k) {
24-
comb[n][k] = (comb[n-1][k-1] + comb[n-1][k]) % MOD;
25-
}
26-
}
27-
}
28-
// nCk
29-
// n = [0,N], k = [0,n]
30-
// Time: O(1)
31-
uint64_t C(size_t const n, size_t const k) const {
32-
if (k > n) throw std::out_of_range("k");
33-
if (n > N) throw std::out_of_range("n");
34-
return comb[n][k];
35-
}
36-
// nHk
37-
// H(n,k) = C(n+k-1,k)
38-
// n = [0,N-k+1], k = [0,N]
39-
// Time: O(1)
40-
uint64_t H(size_t const n, size_t const k) const {
41-
if (n == 0 && k == 0) return 1;
42-
return C(n+k-1,k);
43-
}
44-
// Time: O(1)
45-
size_t size() const {
46-
return N;
47-
}
48-
};
49-
503
using namespace std;
514
using ll = int64_t;
525
using ff = long double;
@@ -58,8 +11,11 @@ int main() {
5811
int L;
5912
cin >> L;
6013

61-
CombinationPascal<> solver(300);
62-
ll ans = solver.H(12, L-12);
14+
ll ans = 1;
15+
for (int i = 1; i <= 11; ++i) {
16+
ans *= L- i;
17+
ans /= i;
18+
}
6319
cout << ans << endl;
6420

6521
return 0;

0 commit comments

Comments
 (0)