私が使っているライブラリを適当にまとめたものです。Verify は Github に移植する段階でちょくちょくいじっているためできていないものが多いです。
Verify ができているものはここの目次にチェックを入れるつもりなので、参考にしてください。
Oxojo が使ってるライブラリを適当にまとめたものでした. 現在は, うちらのチームで使うライブラリとしてみんなで編集したいおきもちです.
最初に次がテンプレで書いてあることを前提にしています(といいつつ普通に自分のテンプレだけど):
#include <bits/stdc++.h>
using namespace std;
typedef long long ll;
typedef long double ld;
typedef pair<ll, ll> pll;
typedef string::const_iterator State;
class ParseError {};
#define rep(i, n) for(ll i = 0; i < (n); i++)
#define reps(i, l, r) for(ll i = (l); i < (r); i++)
#define all(a) (a).begin(), (a).end()
#define rall(a) (a).rbegin(), (a).rend()
#define endl "\n";
const ll INF = LLONG_MAX / 4;
const ld inf = numeric_limits<long double>::max() / (ld)4;
const ll mod1 = 1000000007;
const ll mod2 = 998244353;
ll dx[4] = {1, 0, -1, 0};
ll dy[4] = {0, -1, 0, 1};
void chmin(ll& a, ll b){ if(a > b) a = b; }
void chmax(ll& a, ll b){ if(a < b) a = b; }
ll gcd(ll a, ll b) {return (b == 0 ? a : gcd(b, a % b));}
ll lcm(ll a, ll b) {return a / gcd(a, b) * b;}
const ld pi = 3.1415926535897;
bool islower(char c) { return 'a' <= c && c <= 'z'; }
bool isupper(char c) { return 'A' <= c && c <= 'Z'; }
bool isletter(char c) { return islower(c) || isupper(c); }
あったほうがいいかなって...
グラフに関するライブラリです。
- ✅Bellman-Ford : ベルマンフォード法
- ✅Graph : グラフの構造体
- ✅Kruskal : クラスカル法
- ✅Prim : プリム法
- ✅BFS : 幅優先探索
- DFS : 深さ優先探索
- ✅Dijkstra : ダイクストラ法
- LCA : 最小共通祖先
- Topological Sort : トポロジカルソート
数学系のライブラリです。幾何はここには含まれていません。
- Eratosthenes : エラトステネスの篩
-
Euler_phi : オイラーの
$phi$ 関数 - binomial coefficients : 二項係数
- extgcd : 拡張ユークリッド互除法
- invmod : 逆元
- isprime : 素数判定
- power : べき乗
- prime factorization : 素因数分解
計算幾何のライブラリです。
- ✅Area : 面積
- ✅ccw : ccw
- ✅dot-cross : 内積・外積
- ✅isParallel & isOrthogonal : 平行・直交
- ✅isconvex : 凸性判定
- ✅isinpolygon : 多角形における点の包含
- ✅Projection : 射影
- ✅Reflection : 反射
- ✅template : テンプレート
構造体のライブラリです。
- ✅BIT : BIT
- ✅Segment Tree
- ✅UnionFind : UnionFind
- ✅WeightedUnionFind : 重み付き UnionFind
- ✅SparseTable : Sparse Table