こちらは筆者($p$進大好きbot)の作成したソースコードへのリンク集です。これらのソースコードはページ下部のライセンスに従ってくださることを条件にどなたでもご利用可能です。
ただしご使用の際はページ下部の注意点もよくお読みになって下さい。
- 競技プログラミングコンテスト用ライブラリ
- 例外処理用ライブラリ
- 数学用ライブラリ
- 代数
- 解析
- 算術
- 組み合わせ論
- 関数
- ゲーム
- 幾何
- アフィン空間
- 円
- グラフ
- 非輪状グラフ
- グラフアルゴリズム
- ベルマンフォード
- 幅優先探索
- 深さ優先探索
- 経路全探索
- 木の深さ優先探索
- 直径
- 重軽分解
- 最近共通祖先
- 最近傍探索
- 木DP
- 重み付き木の深さ優先探索
- [重み付き直径(https://github.com/p-adic/Mathematics/tree/master/Geometry/Graph/Algorithm/DepthFirstSearch/Tree/Weighted/Diameter)
- 重み付き最近共通祖先
- [根からの距離の総和](https://github.com/p-adic/Mathematics/tree/master/Geometry/Graph/Algorithm/DepthFirstSearch/Tree/WeightSum]
- ダイクストラ
- ワーシャルフロイド
- ホップクロフトカープ
- 最大流
- 素集合データ構造
- グリッドグラフ
- 線形グラフ
- 線形代数
- 多項式環
- 集合
- 汎用アルゴリズム等
- 汎用ライブラリ
- SFINAEマクロ用
- 音楽用ライブラリ
注意点
- 筆者にとっては
namespace std
がとても便利なので、至るところで使っています。namespace std
を使ってはならない宗派の方はご遠慮下さい。 - 筆者にとってはセッタ/ゲッタの組み合わせによるカプセル化よりもメンバ変数への参照返しをする単一の関数の方が使いやすいので、しばしばセッタ/ゲッタを経由せずにメンバ変数を扱っています。完全なカプセル化をしなければならない宗派の方はご遠慮下さい。
- 筆者にとっては人が作ったクラスをなるべく含まないコードの方がはるかにデバッグしやすいため、可変長配列やスマートポインタは自作のものを使っています。コンテナ等を自作してはならない宗派の方はご遠慮下さい。
- 筆者にとってはメンバの命名を自由に行う方が分かりやすいので、特定の命名規則に従っていません。命名規則を固定しなければならない宗派の方はご遠慮下さい。
- 筆者にとってはデバッグとSFINAEのようなメタプログラミングや同じ定義の繰り返しをマクロでパッケージ化することがとても便利なので、マクロを多用しています。マクロを使ってはならない宗派の方はご遠慮下さい。
また筆者は独学でありかつチームでの開発はしていないので、ソースコードは自身にとっての可読性のみが重視されているためコメントもほとんど書いておらず他の人にとっては可読性が低いことが予想されます。使い方や動作を詳しく知りたいソースコードがあったら筆者のtwitterアカウントまでお問い合わせして下されば、解説するかもしれません。また不具合を見つけましたら教えていただけますと助かります。
ライセンス
本ソースコードの複製またはその改変(以下、本ソフトウェア)を取得したすべての者に対し、以下の項目に同意するという制約下で本ソフトウェアを扱うことを無償で許可します。
- あなたは本ソフトウェアを扱う際に、本ページ(またはその過去の版であって本ソフトウェア取得時点と同一のライセンスが記載されているもの)へのリンクまたはそこへのリンクが明示されたページへのリンクを明記することで、本ソフトウェアを閲覧した他者が本ソフトウェアの所在とライセンスを把握できることを保証します。
- あなたは他者に、本ソフトウェアを本ライセンスに従わない形で扱うことを、明示的であるか暗黙的であるかを問わず許可しません。
- 本ソフトウェアの扱いによって生じる一切の請求、損害、その他の義務について、本ソースコード作成者は何ら責任を負いません。
項目1に関して例示すると、例えばあなたのライブラリが公開されているページに本ページへのリンクを明示して本ソフトウェアの所在とライセンスを確認できるようにした上で、あなたのライブラリが公開されているそのページへのリンクを明記することで項目1に抵触することを避けられます。一方で本ページへのリンクを暗号化したり秘匿したりなど、他者が本ソフトウェアの所在とライセンスを必ずしも把握できない形でリンクを埋め込むだけでは項目1に抵触します。
項目2に関して例示すると、例えば本ソフトウェアを埋め込んだソースコードを他者に自由に改変する許可を与えることは、結果的にそのソースコード内に埋め込まれた本ソフトウェアを項目1の制約なく自由に改変する許可を与えることになるので項目2に抵触します。一方で本ソフトウェアを埋め込んだソースコードを本ライセンスと等価なライセンスまたはより制限の強いライセンスの下で他者に提供することで項目2に抵触することを避けられます。
項目3に関して、筆者は本ソフトウェアの扱いに関する責任は一切負いませんが、一方で前述したように不具合の報告は大歓迎です。