Skip to content

Commit 59c21fe

Browse files
committed
clean code
1 parent fb13cfc commit 59c21fe

File tree

25 files changed

+607
-542
lines changed

25 files changed

+607
-542
lines changed

algo-core/src/main/java/template/Comb.java

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,8 @@
11
package template;
22

33
/**
4+
* CF1825D2
5+
*
46
* @jiangly https://codeforces.com/contest/1824/submission/205086508
57
*/
68
public class Comb {
Lines changed: 31 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,31 @@
1+
package template;
2+
3+
/**
4+
* https://codeforces.com/contest/145/submission/310334243
5+
*/
6+
public class Comb2 {
7+
static int MOD = (int) 1e9 + 7, MX = (int) 1e5 + 5;
8+
static long[] F = new long[MX + 1], invF = new long[MX + 1];
9+
10+
static {
11+
F[0] = F[1] = invF[0] = invF[1] = 1;
12+
for (int i = 2; i <= MX; i++) F[i] = F[i - 1] * i % MOD;
13+
invF[MX] = quickPow(F[MX], MOD - 2);
14+
for (int i = MX - 1; i >= 2; i--) invF[i] = invF[i + 1] * (i + 1) % MOD;
15+
}
16+
17+
static long comb(int n, int m) {
18+
if (n < m || m < 0) return 0;
19+
return F[n] * invF[n - m] % MOD * invF[m] % MOD;
20+
}
21+
22+
static long quickPow(long a, long b) {
23+
long res = 1L;
24+
while (b > 0) {
25+
if ((b & 1) != 0) res = res * a % MOD;
26+
a = a * a % MOD;
27+
b >>= 1;
28+
}
29+
return res;
30+
}
31+
}
Lines changed: 40 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,40 @@
1+
package template.seg;
2+
3+
/**
4+
* CF474F
5+
* ST 表求 GCD
6+
* https://oi-wiki.org/ds/sparse-table/
7+
*/
8+
public class SparseTable_gcd {
9+
long[][] st;
10+
11+
public SparseTable_gcd(int[] a) {
12+
int n = a.length;
13+
st = new long[n][17];
14+
for (int i = 0; i < n; i++) {
15+
st[i][0] = a[i];
16+
}
17+
for (int j = 1; (1 << j) <= n; j++) {
18+
for (int i = 0; i + (1 << j) <= n; i++) {
19+
st[i][j] = getGCD(st[i][j - 1], st[i + (1 << (j - 1))][j - 1]);
20+
}
21+
}
22+
}
23+
24+
long query(int l, int r) {
25+
int k = bitsLen(r - l) - 1;
26+
return getGCD(st[l][k], st[r - (1 << k)][k]);
27+
}
28+
29+
// bits.Len:
30+
// Len returns the minimum number of bits required to represent x; the result is 0 for x == 0.
31+
int bitsLen(long x) {
32+
if (x == 0) return 0;
33+
// return Long.toBinaryString(x).length();
34+
return Long.numberOfTrailingZeros(Long.highestOneBit(x)) + 1;
35+
}
36+
37+
static long getGCD(long num1, long num2) {
38+
return num1 == 0 ? num2 : getGCD(num2 % num1, num1);
39+
}
40+
}

atcoder/atcoder-beginner/src/main/java/c171/Abc171_f.java

Lines changed: 22 additions & 36 deletions
Original file line numberDiff line numberDiff line change
@@ -1,70 +1,56 @@
11
package c171;
22

3-
import java.nio.charset.StandardCharsets;
43
import java.util.Scanner;
54

65
public class Abc171_f {
76
static int k;
87
static String s;
98

109
public static void main(String[] args) {
11-
Scanner scanner = new Scanner(System.in, StandardCharsets.UTF_8);
10+
Scanner scanner = new Scanner(System.in);
1211
k = scanner.nextInt();
1312
s = scanner.next();
1413
System.out.println(solve());
1514
}
1615

17-
private static final int MOD = (int) (1e9 + 7);
18-
1916
private static String solve() {
2017
int n = s.length();
2118

2219
long p26 = 1;
23-
Comb comb = new Comb(n - 1 + k);
24-
long p25 = comb.quickPow(25, k);
20+
long p25 = quickPow(25, k);
2521
long inv25 = 280000002; // pow(25, mod-2)
2622
long ans = 0;
2723
for (int i = 0; i <= k; i++) {
28-
ans = (ans + p26 * p25 % MOD * comb.binom(n - 1 + k - i, n - 1)) % MOD;
24+
ans = (ans + p26 * p25 % MOD * comb(n - 1 + k - i, n - 1)) % MOD;
2925
p26 = p26 * 26 % MOD;
3026
p25 = p25 * inv25 % MOD;
3127
}
3228
return String.valueOf(ans);
3329
}
3430

35-
private static class Comb {
36-
private final long[] fac, invfac;
31+
static int MOD = (int) 1e9 + 7, MX = (int) 2e6;
32+
static long[] F = new long[MX + 1], invF = new long[MX + 1];
3733

38-
public Comb(int n) {
39-
fac = new long[n + 1];
40-
fac[0] = 1;
41-
for (int i = 1; i <= n; i++) {
42-
fac[i] = fac[i - 1] * i % MOD;
43-
}
44-
invfac = new long[n + 1];
45-
for (int i = 0; i <= n; i++) {
46-
invfac[i] = quickPow(fac[i], MOD - 2);
47-
}
48-
}
34+
static {
35+
F[0] = F[1] = invF[0] = invF[1] = 1;
36+
for (int i = 2; i <= MX; i++) F[i] = F[i - 1] * i % MOD;
37+
invF[MX] = quickPow(F[MX], MOD - 2);
38+
for (int i = MX - 1; i >= 2; i--) invF[i] = invF[i + 1] * (i + 1) % MOD;
39+
}
4940

50-
// C(n, m) = n! / m!(n-m)!
51-
private long binom(int n, int m) {
52-
if (n < m || m < 0) return 0;
53-
return fac[n] * invfac[m] % MOD * invfac[n - m] % MOD;
54-
}
41+
static long comb(int n, int m) {
42+
if (n < m || m < 0) return 0;
43+
return F[n] * invF[n - m] % MOD * invF[m] % MOD;
44+
}
5545

56-
// 模下的 a^b
57-
private long quickPow(long a, long b) {
58-
long res = 1L;
59-
while (b > 0) {
60-
if ((b & 1) == 1) {
61-
res = res * a % MOD;
62-
}
63-
a = a * a % MOD;
64-
b >>= 1;
65-
}
66-
return res;
46+
static long quickPow(long a, long b) {
47+
long res = 1L;
48+
while (b > 0) {
49+
if ((b & 1) != 0) res = res * a % MOD;
50+
a = a * a % MOD;
51+
b >>= 1;
6752
}
53+
return res;
6854
}
6955
}
7056
/*

atcoder/atcoder-regular/src/main/java/c077/Arc077_b.java

Lines changed: 22 additions & 36 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,5 @@
11
package c077;
22

3-
import java.nio.charset.StandardCharsets;
43
import java.util.ArrayList;
54
import java.util.List;
65
import java.util.Scanner;
@@ -10,7 +9,7 @@ public class Arc077_b {
109
static int[] a;
1110

1211
public static void main(String[] args) {
13-
Scanner scanner = new Scanner(System.in, StandardCharsets.UTF_8);
12+
Scanner scanner = new Scanner(System.in);
1413
n = scanner.nextInt();
1514
a = new int[n + 1];
1615
for (int i = 0; i < n + 1; i++) {
@@ -32,52 +31,39 @@ private static String solve() {
3231
}
3332
List<String> output = new ArrayList<>();
3433
int m = pos.get(v).get(0) + n - pos.get(v).get(1);
35-
Comb comb = new Comb(n + 1);
3634
for (int k = 1; k <= n + 1; k++) {
37-
long res = comb.binom(n + 1, k);
35+
long res = comb(n + 1, k);
3836
if (k - 1 <= m) {
39-
res = (res - comb.binom(m, k - 1) + MOD) % MOD;
37+
res = (res - comb(m, k - 1) + MOD) % MOD;
4038
}
4139
output.add(String.valueOf(res));
4240
}
4341
return String.join(System.lineSeparator(), output);
4442
}
4543

46-
private static final int MOD = (int) (1e9 + 7);
44+
static int MOD = (int) 1e9 + 7, MX = (int) 1e5 + 5;
45+
static long[] F = new long[MX + 1], invF = new long[MX + 1];
4746

48-
private static class Comb {
49-
private final long[] fac, invfac;
50-
51-
public Comb(int n) {
52-
fac = new long[n + 1];
53-
fac[0] = 1;
54-
for (int i = 1; i <= n; i++) {
55-
fac[i] = fac[i - 1] * i % MOD;
56-
}
57-
invfac = new long[n + 1];
58-
for (int i = 0; i <= n; i++) {
59-
invfac[i] = quickPow(fac[i], MOD - 2);
60-
}
61-
}
47+
static {
48+
F[0] = F[1] = invF[0] = invF[1] = 1;
49+
for (int i = 2; i <= MX; i++) F[i] = F[i - 1] * i % MOD;
50+
invF[MX] = quickPow(F[MX], MOD - 2);
51+
for (int i = MX - 1; i >= 2; i--) invF[i] = invF[i + 1] * (i + 1) % MOD;
52+
}
6253

63-
// C(n, m) = n! / m!(n-m)!
64-
private long binom(int n, int m) {
65-
if (n < m || m < 0) return 0;
66-
return fac[n] * invfac[m] % MOD * invfac[n - m] % MOD;
67-
}
54+
static long comb(int n, int m) {
55+
if (n < m || m < 0) return 0;
56+
return F[n] * invF[n - m] % MOD * invF[m] % MOD;
57+
}
6858

69-
// 模下的 a^b
70-
private long quickPow(long a, long b) {
71-
long res = 1L;
72-
while (b > 0) {
73-
if ((b & 1) == 1) {
74-
res = res * a % MOD;
75-
}
76-
a = a * a % MOD;
77-
b >>= 1;
78-
}
79-
return res;
59+
static long quickPow(long a, long b) {
60+
long res = 1L;
61+
while (b > 0) {
62+
if ((b & 1) != 0) res = res * a % MOD;
63+
a = a * a % MOD;
64+
b >>= 1;
8065
}
66+
return res;
8167
}
8268
}
8369
/*

atcoder/atcoder-regular/src/main/java/c183/Arc183_c.java

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -61,6 +61,7 @@ private static String solve() {
6161
}
6262

6363
static long comb(int n, int m) {
64+
if (n < m || m < 0) return 0;
6465
return F[n] * invF[n - m] % MOD * invF[m] % MOD;
6566
}
6667

codeforces/codeforces-02/src/main/java/p145/CF145C.java

Lines changed: 21 additions & 30 deletions
Original file line numberDiff line numberDiff line change
@@ -24,8 +24,6 @@ public static void main(String[] args) {
2424
System.out.println(solve());
2525
}
2626

27-
static final int MOD = (int) 1e9 + 7;
28-
2927
// https://codeforces.com/contest/145/submission/310334243
3028
private static String solve() {
3129
Map<Integer, Integer> cnt = new HashMap<>();
@@ -52,14 +50,13 @@ private static String solve() {
5250
}
5351
}
5452

55-
Comb comb = new Comb(n);
5653
// for i, v := range f {
5754
// ans = (ans + v*cm.c(n-tot, k-i)) % mod
5855
// }
5956
long ans = 0;
6057
for (int i = Math.min(m, k); i >= 0; i--) {
6158
if (tot + i >= k) {
62-
ans += f[i] * comb.binom(tot, k - i) % MOD;
59+
ans += f[i] * comb(tot, k - i) % MOD;
6360
}
6461
}
6562
ans %= MOD;
@@ -75,35 +72,29 @@ static boolean onlyHas47(int x) {
7572
return true;
7673
}
7774

78-
static class Comb {
79-
long[] fac, inv_fac;
80-
81-
public Comb(int n) {
82-
fac = new long[n + 1];
83-
inv_fac = new long[n + 1];
84-
fac[0] = fac[1] = inv_fac[0] = inv_fac[1] = 1;
85-
for (int i = 2; i <= n; i++) fac[i] = fac[i - 1] * i % MOD;
86-
// for (int i = 0; i <= n; i++) inv_fac[i] = quickPow(fac[i], MOD - 2);
87-
inv_fac[n] = quickPow(fac[n], MOD - 2);
88-
for (int i = n - 1; i >= 2; i--) inv_fac[i] = inv_fac[i + 1] * (i + 1) % MOD;
89-
}
75+
static int MOD = (int) 1e9 + 7, MX = (int) 1e5 + 5;
76+
static long[] F = new long[MX + 1], invF = new long[MX + 1];
9077

91-
// C(n, m) = n! / m!(n-m)!
92-
long binom(int n, int m) {
93-
if (n < m || m < 0) return 0;
94-
return fac[n] * inv_fac[m] % MOD * inv_fac[n - m] % MOD;
95-
}
78+
static {
79+
F[0] = F[1] = invF[0] = invF[1] = 1;
80+
for (int i = 2; i <= MX; i++) F[i] = F[i - 1] * i % MOD;
81+
invF[MX] = quickPow(F[MX], MOD - 2);
82+
for (int i = MX - 1; i >= 2; i--) invF[i] = invF[i + 1] * (i + 1) % MOD;
83+
}
9684

97-
// 模下的 a^b
98-
long quickPow(long a, long b) {
99-
long res = 1L;
100-
while (b > 0) {
101-
if ((b & 1) != 0) res = res * a % MOD;
102-
a = a * a % MOD;
103-
b >>= 1;
104-
}
105-
return res;
85+
static long comb(int n, int m) {
86+
if (n < m || m < 0) return 0;
87+
return F[n] * invF[n - m] % MOD * invF[m] % MOD;
88+
}
89+
90+
static long quickPow(long a, long b) {
91+
long res = 1L;
92+
while (b > 0) {
93+
if ((b & 1) != 0) res = res * a % MOD;
94+
a = a * a % MOD;
95+
b >>= 1;
10696
}
97+
return res;
10798
}
10899

109100
static class FastReader {

0 commit comments

Comments
 (0)