ACL(ac-library) をマージしてシングルファイルで使えるようにしました.†邪悪†
marged_ACL.cpp の内容に続けてコードを書けば,ACL をローカルの環境でも非AtCoderでもどこでも使えます.
また,ACL のドキュメントをここからブラウザ上 で見れるようにしました.使い方はこっちを見てね.
AtCoder Library Practice Contest A - Disjoint Set Union を解いてみる例
// ----------------------------------------------------------------
// marged_ACL.cpp の内容をここに貼る
// ----------------------------------------------------------------
#define rep(i,n) for(int i = 0; i < (n); ++i)
using namespace std;
using namespace atcoder;
int main(){
int n,q;
cin >> n >> q;
dsu uf(n);
rep(i, q){
int t, u, v;
cin >> t >> u >> v;
if(t == 0){
uf.merge(u, v);
} else {
cout << uf.same(u, v) << endl;
}
}
}
ACL (AtCoder Library) が Visual Studio でそのままでは使えなかったのでメモ
【'_umul128': 識別子が見つかりませんでした 】
→ x86(32bit) になってるので上の方のメニューから x64(64bit) に変更しましょう.
【式は定数に評価されませんでした】
→ internal_math.hpp の 86 行目 (is_prime_constexpr関数内)
for (long long a : {2, 7, 61}) {
を
int v[] = { 2, 7, 61 };
for (long long a : v) {
にする
以下のコードで marged_ACL.cpp は生成されました.
echo > tmp.cpp
cat atcoder/internal_bit.hpp >> tmp.cpp
cat atcoder/internal_math.hpp >> tmp.cpp
cat atcoder/internal_queue.hpp >> tmp.cpp
cat atcoder/internal_scc.hpp >> tmp.cpp
cat atcoder/internal_type_traits.hpp >> tmp.cpp
cat atcoder/modint.hpp >> tmp.cpp
cat atcoder/convolution.hpp >> tmp.cpp
cat atcoder/dsu.hpp >> tmp.cpp
cat atcoder/fenwicktree.hpp >> tmp.cpp
cat atcoder/lazysegtree.hpp >> tmp.cpp
cat atcoder/math.hpp >> tmp.cpp
cat atcoder/maxflow.hpp >> tmp.cpp
cat atcoder/mincostflow.hpp >> tmp.cpp
cat atcoder/scc.hpp >> tmp.cpp
cat atcoder/segtree.hpp >> tmp.cpp
cat atcoder/string.hpp >> tmp.cpp
cat atcoder/twosat.hpp >> tmp.cpp
cat tmp.cpp | sed '/<atcoder/d' |grep -v '^\s*$' > marged_ACL.cpp
rm tmp.cpp
追記:コレで作ったほうがスマートだったな,次回があったらこっちで作ります
echo "#include<atcoder/all>" > tmp.cpp
python3 expander.py tmp.cpp
grep -v '^\s*$' combined.cpp > marged_ACL.cpp
rm tmp.cpp combined.cpp
良ければ GitHub アカウント持ってる人は Star してください