Skip to content

Commit 12465a6

Browse files
author
atcoder-live
committed
add gcd,mp,readme/ upd mint,vector
1 parent a28cbf7 commit 12465a6

File tree

5 files changed

+80
-1
lines changed

5 files changed

+80
-1
lines changed

README.md

Lines changed: 38 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,38 @@
1+
AtCoder解説放送ライブラリ集
2+
----
3+
## これは何?
4+
[解説放送](https://www.youtube.com/channel/UCtG3StnbhxHxXfE6Q4cPZwQ)で作ったライブラリを公開しています。
5+
6+
## 目次
7+
8+
### ユーティリティ
9+
|名前|コード|説明|
10+
|:--|:--|:--|
11+
|テンプレート|[template.cpp](template.cpp)||
12+
|ModInt|[mint.cpp](mint.cpp)|自動でmodを取ってくれる整数型|
13+
14+
### データ構造
15+
|名前|コード|説明|
16+
|:--|:--|:--|
17+
|BIT|[bit.cpp](bit.cpp)|Binary Indexed Tree (Fenwick Tree)|
18+
19+
### 数学
20+
|名前|コード|説明|
21+
|:--|:--|:--|
22+
|GCD/LCM|[gcd.cpp](gcd.cpp)|最大公約数と最小公倍数|
23+
|Combination|[comb.cpp](comb.cpp)|nCkをmod素数で求める|
24+
25+
### グラフ
26+
|名前|コード|説明|
27+
|:--|:--|:--|
28+
|LCA|[lca.cpp](lca.cpp)|最小共通祖先|
29+
30+
### 文字列
31+
|名前|コード|説明|
32+
|:--|:--|:--|
33+
|KMP|[mp.cpp](mp.cpp)|文字列検索アルゴリズム(正確にはMP)|
34+
35+
### 幾何
36+
|名前|コード|説明|
37+
|:--|:--|:--|
38+
|Vector|[vector.cpp](vector.cpp)|ベクトル(点を扱う際にも使う)|

gcd.cpp

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,6 @@
1+
// GCD, LCM
2+
// https://youtu.be/8lm8o8L9Bmw?t=2285
3+
// https://youtu.be/XI8exXVxZ-Q?t=3595
4+
// https://youtu.be/F2p_e6iKxnk?t=843
5+
ll gcd(ll a, ll b) { return b?gcd(b,a%b):a;}
6+
ll lcm(ll a, ll b) { return a/gcd(a,b)*b;}

mint.cpp

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,7 @@ const int mod = 1000000007;
66
struct mint {
77
ll x; // typedef long long ll;
88
mint(ll x=0):x((x%mod+mod)%mod){}
9+
mint operator-() const { return mint(-x);}
910
mint& operator+=(const mint a) {
1011
if ((x += a.x) >= mod) x -= mod;
1112
return *this;

mp.cpp

Lines changed: 34 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,34 @@
1+
// Morris-Pratt
2+
// https://youtu.be/9MphwmIsO7Q?t=7283
3+
template<typename T>
4+
struct MP {
5+
int n;
6+
T t;
7+
vector<int> a;
8+
MP() {}
9+
MP(const T& t): t(t) {
10+
n = t.size();
11+
a = vector<int>(n+1);
12+
a[0] = -1;
13+
int j = -1;
14+
for (int i = 0; i < n; ++i) {
15+
while (j != -1 && t[j] != t[i]) j = a[j];
16+
j++;
17+
a[i+1] = j;
18+
}
19+
}
20+
int operator[](int i) { return a[i];}
21+
vector<int> findAll(const T& s) {
22+
vector<int> res;
23+
int j = 0;
24+
for (int i = 0; i < s.size(); ++i) {
25+
while (j != -1 && t[j] != s[i]) j = a[j];
26+
j++;
27+
if (j == n) {
28+
res.push_back(i-j+1);
29+
j = a[j];
30+
}
31+
}
32+
return res;
33+
}
34+
};

geom.cpp renamed to vector.cpp

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
// geometry
1+
// vector
22
// https://youtu.be/UWbGRhF3Ozw?t=9564
33
const double eps = 1e-9;
44
struct V {

0 commit comments

Comments
 (0)