Skip to content

Navigation Menu

Sign in
Appearance settings

Search code, repositories, users, issues, pull requests...

Provide feedback

We read every piece of feedback, and take your input very seriously.

Saved searches

Use saved searches to filter your results more quickly

Sign up
Appearance settings

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-
privatestatic classComb {
36-
privatefinallong[] fac, invfac;
31+
static intMOD = (int) 1e9 + 7, MX = (int) 2e6;
32+
staticlong[] F = newlong[MX + 1], invF = newlong[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)

AltStyle によって変換されたページ (->オリジナル) /