2013-11-01から1ヶ月間の記事一覧

Advent Calendar に書くこと

Boost.Spirit Tutorials のXMLとかの詳しい解読内容。

メモ

OpenGL ES "3D Tutorials的な" "ちょっと古い記事"

12月 進捗ログ

月間目標 Boost::Spirit使ってゲームの構文解析部を動かす マルチエージェントシステムについて調べる。正月明けまでに半分実装を済ます。 AOJ solve数 350 未完成記事の完成

Dinic法

Range Minimum Query

--

Ford-Fulkerson法

強連結成分分解

有向グラフ上の部分集合Sの任意の頂点u, vについて,uからvに到達可能であるときSは強連結である。Sにどの頂点を加えても強連結にできないとき,Sは強連結成分である。有向グラフGについて全ての強連結成分をつぶして一つにすると、グラフはDAGになる。編集中

トポロジカルソート

TOPOLOGICAL-SORT(G) 各頂点 v の終了時刻 v.f を計算するために DFS(G) を呼び出す ある頂点の探索が終了するたびに、この頂点を連結リストの先頭に挿入する return 頂点の連結リスト

Dijkstraのアルゴリズム

入力:有向グラフG, 非負の重み関数 c: E(G) → R_+ および始点 s ∈ V(G) 出力:sからすべての点 v ∈ V(G) への最短パスとその距離、より正確には、 すべての点 v ∈ V(G) に対する p(v) と l(v) ただし、l(v) は最短s-p(v)-パスと 辺(p(v), v)からなる最短s-v…

--

参考: 線形代数入門 EMANの物理学

k-最短路問題

s-t-パスの中でk番目に短いものを求める問題をk-最短路問題という。 Priority Queueを使ったダイクストラで実装するのが基本的な解法となる。 参考 Spaghetti Souce

AOJ 1126 The Secret Number

AOJ

解いてる途中のメモ MAPの中で数字のものだけを使って文字列結合をしていく。dpはstringの配列(vector) でもつとよい。 dp[i+1][j+1] = max(dp[i][j+1]+M[i+1][j+1], max(dp[i+1][j]+M[i+1][j+1])) Mが数値か文字かの判定が必要。数値なら、数が大きくなるよ…

AOJ 1132 Circle and Points

AOJ

任意の二点を選んでその点を通る円を作る。円は2個ある。 そのような全ての円それぞれが包含できる点の数を数えて最大値を求める。N 円の中心点の求め方 選んだ2点a, bの作る直線Aの生む垂直二等分線と、2点のうち一方の点と中心を結ぶ長さ1の線分から、三…

AOJ1131 Unit Fraction Partition

AOJ

途中 メモ p, q, a, n が与えられる。 分数の値が等しいというのを確かめる際に浮動小数点に直してはいけない。 p/q, nume/deno の2つの値が等しい p*deno == q*nume であることを利用する また、問題文で指定されるような枝刈りを行うこと

AOJ 0224 Bicycle Diet

AOJ

途中 訪れたケーキの集合と現在地点を状態として持って拡張ダイクストラを実行する。 L, C, H, Dの種類のノードがあるが、全て一つのノードに詰める。その時、添字が例えば H, D, L, C の順になるように詰めて、予め種類ごとの場所を決めてやるのが上手い。

AOJ0531 Paint Color

AOJ

蟻本のそれで座標圧縮する。テープの区間を塗りつぶしたらDFSorBFSすればよい。座標圧縮する問題ではスタックオーバーフローの危険のないBFSの方が安全。まだ座標圧縮自体が掴みきれてない。

AOJ1145 The Genome Database of All Space Life

AOJ

AOJ1163 Cards

AOJ

二部グラフの最大マッチング問題なのでフローを作り、最大流量を調べる。青と赤のカードのペアで gcd > 1 が取れるものに辺が引ける。

AOJ 1162 Discrete Speed

隣接リストを用いて拡張ダイクストラをする。 やりかた知ってれば書き下すだけだった。状態として 「前の位置」「現在位置」「到着時の速度」「経過時間」 を持つとよい。priority_queue に push する条件として制限速度を与えてやることに注意。

AOJ 1189 Prime Caves

AOJ

未解決 初めに洞穴のマップを作る。エラトステネスの篩を掛けて、マップのidと対応を見ると素数洞穴がわかる。 洞穴のマップがバグりそうならdx, dyを使わずに渦を1方向ずつforループを回して作ってみれば良い。これでまずバグらない。後はDPなのだが、私は…

AOJ1163 Cards

AOJ

二部グラフの最大マッチング問題なのでフローを作り、最大流量を調べる。青と赤のカードのペアで gcd > 1 が取れるものに辺が引ける。

AOJ1145 The Genome Database of All Space Life

AOJ

解きたいメモ

AOJ

記事作りかけのやつと1144 Curling 2.0

yomitai列挙、と進捗率

取り敢えず読みたい本やテキストを色々列挙。進み遅すぎるので相対的に量が多く感じてしまう。期間は決めてない。持ってるものは進捗も書いてみた。重要度 赤→青→無印 コツコツ=緑 アルゴリズム (!)蟻本(繰り返してる) (!)チーター本(まだ少ししか) (…

Graham走査法

サイト http://i-health.u-aizu.ac.jp/CompuGeo/2013/handouts/chapter3/Chapter3S.pdf 最小のy座標をもつ点y0を発見する。y0から偏角が小さい順に他の点を全てソートする。

algorithm

STL

next_permutation stringや他のコンテナの全ての順列を生成する。 #include <algorithm> ... string str = "ABCDEF"; do { cout << str << endl; } while(next_permutation(str.begin(), str.end())); Result: ABCDEF ABCDFE ABCEDF ABCEFD ... FEDCBA (計 6! = 720個の</algorithm>…

繰り返し二乗法

繰り返し二乗法のアルゴリズムを答えよ。

解を仮定し可能か判定

L_iの紐N本から同じ長さの紐をK本切り出したときの最長の長さを求めよ。

反転

AかBからなる文字列が有る。Aを反転するとBになり、Bを反転するとAになる。 連続するKの部分列は一度に反転できる。全てAにするために必要な最小操作回数Mと、そのときの最小のKを出力せよ。