perogram

ライブラリ

2次元累積和クラスを作成

動機 1次元累積和クラスはよく使っているため 2次元累積和を使う問題と出会ったため Code // 2次元累積和 struct AccSum2D{ VV Ac; // accumulate ll W; ll H; AccSum2D(VV &A){ H = A.size(); W = A[0].size(); Ac.resize(H+1, VI(W+1)); // indexを1つずら…

2次元BITクラス

参考 http://hos.ac/slides/20140319_bit.pdf Code #include<bits/stdc++.h> using namespace std; using ll = long long; using VI = vector<ll>; using VV = vector<VI>; #define FOR(i,a,b) for(ll i=(a);i<(b);++i) #define rep(i,b) FOR(i, 0, b) #define ALL(v) (v).begin(), </vi></ll></bits/stdc++.h>…

E - MUL ~燃やす埋める・最大流・フロー flow~

Quiz https://atcoder.jp/contests/arc085/tasks/arc085_c AC Code https://atcoder.jp/contests/arc085/submissions/8316327 解法 アルメリアさんの解説の通り その他 割る・残すは右左のどちらでもいい(今回たまたまアルメリアさんとは逆になった) 罰金…

BITを2つ使って範囲更新・範囲和 (区間更新・区間和)

使った問題 https://atcoder.jp/contests/abc141/tasks/abc141_c Submisssion https://atcoder.jp/contests/abc141/submissions/7551683 できること 範囲加算 [a, b) にwを加える 範囲和 [a, b)の和を求める (計算量 : それぞれlog(N)) 内部実装 差分をBITで…

最小全域木 MST (minimum spanning tree)

Quiz http://judge.u-aizu.ac.jp/onlinejudge/description.jsp?id=GRL_2_A&lang=jp Submission http://judge.u-aizu.ac.jp/onlinejudge/review.jsp?rid=3589709#1 解法 Kruskal法を使う 同じグループ判定にUnion Findを使う エッジコストの小さい順に取り出…

ベルマンフォード bellman ford 実装

Quiz http://judge.u-aizu.ac.jp/onlinejudge/description.jsp?id=GRL_1_B Submission http://judge.u-aizu.ac.jp/onlinejudge/review.jsp?rid=3589692#1 参考 https://ei1333.github.io/luzhiled/snippets/graph/bellman-ford.html その他 競プロでの問題で…

線分の交差判定 c++ Judgment of intersection of line segments

http://perogram.hateblo.jp/entry/abc016_4 この記事を関数として切り出した。 関数 // 交差判定セット typedef complex<double> C; double cross(C a, C b){ return a.real() * b.imag() - a.imag() * b.real(); } // ベクトル p0->p1, q0->q1 bool is_intersect(C</double>…

No.658 テトラナッチ数列 Hard 〜行列ライブラリのはじまり〜

Quiz https://yukicoder.me/problems/no/658 Submit https://yukicoder.me/submissions/342366 解法 公式解説の通り コンパイル vector<vector > を初期化子リストで初期化するにはオプションが必要 g++ -std=c++11 answer.cpp その他 行列ライブラリと言えるほどでは</vector>…

累積和クラスを作ってみた

作成動機 元となる配列サイズ+1で作ったり、範囲の和を取る時に添え字でミスりそう いつも同じ作成をしているので省略したい Code struct AccSum{ vector<ll> Ac; ll L; AccSum(vector<ll> &A){ L = A.size(); Ac.resize(L+1); FOR(i, 0, L){ Ac[i+1] = Ac[i] + A[i]</ll></ll>…

素因数分解, 約数の種類数

// 素因数分解 map<ll, ll> factorize(ll n){ map<ll, ll> mp; FOR(i, 2, n+1){ while(n%i==0){ mp[i]++; n/=i; } } return mp; } シンプルにできたので保存 計算量O(N) 別VER 上のはn=1010などではTLE https://yukicoder.me/submissions/335272 計算量O(√N) // 素因数分解 /</ll,></ll,>…

D - 閉路 abc014_4 ~木の深さを求めるdfs~

Quiz https://atcoder.jp/contests/abc014/tasks/abc014_4 Submit https://atcoder.jp/contests/abc014/submissions/4325911 解法 どこかをrootにしてdfsでdepthを測っておく LCA (Lowest Common Ancestor)が高速に求まれば、depthの差から閉路の長さは求ま…