AtCoder Grand Contest 009 B - Tournament

問題概要 略 リンク やや雑な解法メモ 次のようなデータ構造を考える。 child[i] = [人iに負けた人たち] また、次のようなDPを考える。 DP[i] = 人iが勝ち進んだところまでのトーナメント表の最小の深さ child[v] = [m1, m2, m3, m4]の時、 miを人vが直近に…

今年読んだ技術書

年末で会社が休みなので、自分のために今年読んだり読まなかったりした技術書を整理します。 目次 全部読んだ 半分以上読んだ 半分未満しか読んでない 全部読んだ オブジェクト指向でなぜつくるのか 評価: ★★★★☆ 自分用メモ: もう一度読むなら9章から 概要・…

CODE FESTIVAL 2016 Final E - Cookies

問題概要 りんごさんは1秒で1枚クッキーを焼ける りんごさんはA秒かけて今あるクッキーT枚を全て食べることができ、それによって1秒でT枚クッキーを焼けるようになる N枚以上のクッキーを最短何秒で焼けるか リンク 部分点解法 N <= 106なので、O(N)かO(N lo…

Dinic法

ライブラリとして持ってはいたけど、あまり理解していなかったDinic法について学び直したのでメモ。 Dinic法とは Dinic法は、最大フロー問題を効率的に解くためのアルゴリズムである。 最大フロー問題については、蟻本第二版188ページ参照。 概要 N個のノー…

AtCoder Beginner Contest 041 D - 徒競走

問題概要 リンク 略 解法 コメント #define MAX_N 16 int N,M; ll dp[1 << MAX_N]; bool edge[MAX_N][MAX_N]; int main(){ ios::sync_with_stdio(false); cin >> N >> M; REP(i, M) { int x, y; cin >> x >> y;x--;y--; edge[x][y] = true; } // dp[mask]:=m…

POJ 3280 Cheapest Palindrome

POJは制約が多すぎる (unordered_mapが使えなかった) 問題概要 リンク N種類の文字で構成された長さMの文字列Sが与えられる この文字列にいくつかの文字を追加、あるいは削除して回文にする i番目の文字を追加するには、a_iのコスト、削除するにはb_iのコス…

AtCoder Regular Contest 056 B - 駐車場

問題概要 リンク 略 解法 ある車xに着目する時、あるエッジの両端u,vについて、min(u,v) >= xの時、その道にまだ車が止まっていないため通行可能である 通行可能な道をUnion Findでマージし、same(S, x)がtrueとなれば到達可能である この制約はxが大きくな…

POJ 2229 Sumsets

蟻本章末問題 問題概要 リンク ある数字Nが与えられる Nを2の累乗の数の和で表す 例えば4なら 4 2 + 2 2 + 1 + 1 1 + 1 + 1 + 1 そのような組み合わせは何通りか 解法 dp[i] := N=iの時の組み合わせの数 dp[i] = dp[i/2] + dp[i-1] then i mod 2=0 dp[i] = d…

POJ 3176 Cow Bowling

蟻本章末問題 問題概要 リンク ボーリングのピンが並んでる 一番前のピンを倒す その後ろのピンのうち左右どちらかのピンを倒すことができる さらに、その後ろのピンのうち左右どちらかのピンを倒すことができる 以上の作業を繰り返し一番後ろのピンまで倒す…

AtCoder Regular Contest 045 C - エックスオア多橋君

問題概要 リンク 木 ノードとノードの単純パスの距離は通ったエッジのXOR和 XOR和がXになるのは何通りか 解法 あるノードを根とした時、aとbの単純パスはa-LCA(a,b)-bである。 ※LCAはLowest Common Ancestor すなわちその距離L(a,b)は、 L(a,b) = L(a,LCA(a,…

AtCoder Regular Contest 048 C - 足の多い高橋君

問題概要 (リンク)http://arc048.contest.atcoder.jp/tasks/arc048_c 高橋君はN本の足がある N本の足はLi本のパーツに分かれている Li本の足に0か1を書き込む 任意の2本の足A,Bを選んだ時、Aのつま先-胴体-Bのつま先と辿った時、0、1は回文となっていなけれ…

AtCoder Regular Contest 049 C - ぬりまーす

頂点が有向グラフである意味がない… 問題概要 (リンク)http://arc049.contest.atcoder.jp/tasks/arc049_c N頂点の有向グラフがある 頂点に色を塗る その際以下の制約つける 頂点xに色をぬるとき、頂点yに色が塗られていなければならない 頂点uに色を塗るとき…

AtCoder Beginner Contest 040 D - 道路の老朽化対策について

問題概要 (リンク)http://abc040.contest.atcoder.jp/tasks/abc040_d y_i年に作られた道は都市a_iと都市b_iを結ぶ 住民jはv_jに住んでいてw_j以前に作られた道を通りたくない 全ての住人が移動できる都市の数を求める 解法 UnionFindを使う 少し拡張してUnio…

AtCoder Beginner Contest 040 B - □□□□□

ABCのBなのに、難しいと感じた人が多かった問題。 1回REでWAを出してしまった。 問題概要 (リンク)http://abc040.contest.atcoder.jp/tasks/abc040_b n枚のタイルを敷き詰めて、長方形を作る。 その時、短辺と長辺の差 + 余ったタイルが最小になるようにする…

AtCoder Regular Contest B - せんべい

問題概要 リンク 1 ~ Nまでの数字が書かれたせんべいがランダムな順番で与えられる シカは1枚目から順にせんべいを食べるか、食べないか選ぶ シカは全部でK枚のせんべいを食べられる シカはn枚目のせんべいを見ている時, 1 ~ n枚目のせんべいの大小関係がわ…

AtCoder Regular Contest 55 C - ABCAC

問題概要 リンク 文字列Sに対して S=A+B+C+A+C となるような部分文字列A, B, Cがいくつ考えうる数え上げる。 解法 部分点 AとCの文字数を決める O(N2) 条件を満たすかはローリングハッシュでO(1) 満点 SをABCとACに分ける境目を探索する その際、Z algorithm…

Aim Tech Div2 C. Graph and String

本番中は,UnionFindのコードをコピペして座ってるだけ. 本番後,Twitterで参加者のツイートを見てAC. 問題はこちら 問題概要 a,b,cから構成される文字列に対応したグラフを考える 文字列のi番目の文字はi番目のノードに対応している 文字列のi番目の文字…

Suffix Array

新しいアルゴリズムを学んだので自分用の備忘録. Suffix Arrayとは 日本語では接尾辞配列 ある文字列の全ての接尾辞を辞書順に並べたもの 例えば “coder” という文字列について考える 接尾辞は “coder”, “oder”, “der” “er”, “r”, “” 接尾辞配列は以下の通…

CodeforcesでACした問題を確認できるサイトを作った

CodeforcesでACした問題を確認できるサイトを作った. Codeforces AC List 使い方 フォームにCodeforcesのIDを入れてEnterを押すだけ. ACした問題は緑色になる. 作った経緯 競技プログラミングの能力を効率的にあげるには,自分に適したレベルの問題を解く…

Typical DP Contest C. トーナメント

※このエントリは競プロで圧倒的成長 Advent Calendar 2015の25日目のエントリです. 問題 問題概要 トーナメントを行う 参加者iのレートはRiである レートRpとレートRqが戦った時,前者が勝つ確率は [latex]\frac{1}{1+10^{(Rq-Rp)/400}}[/latex] 各参加者が…

Typical DP Contest A. コンテスト

※このエントリは競プロで圧倒的成長 Advent Calendar 2015の24日目のエントリです. 問題 問題概要 N問のコンテストがある i問目の点数はpiである このコンテストで獲得できる得点のパターンは何種類か 解法 dp[i][j]:=i問目までj点を獲得できるか (できる: …

AtCoder Regular Contest 6 B. あみだくじ

※このエントリは競プロで圧倒的成長 Advent Calendar 2015の23日目のエントリです. 問題 ARCのB問題埋め. 問題概要 あみたくじと到達したい地点が与えられる 到達するために選ぶべきは線はどれか 解法 amita_to_r[高さ][線番号]にその縦線でその高さにいる…

AtCoder Regular Contest 1 B. リモコン

※このエントリは競プロで圧倒的成長 Advent Calendar 2015の22日目のエントリです. 問題 ARCのB問題埋め. 問題概要 エアコンの設定温度をA度からB度にしたい エアコンは1度,5度,10度刻みで温度を変えることができる 何回の操作が必要か 解法 ある温度iか…

AtCoder Regular Contest 4 B. 2点間距離の最大と最小 ( Maximum and Minimum )

※このエントリは競プロで圧倒的成長 Advent Calendar 2015の21日目のエントリです. 問題 ARCのB問題埋め. 問題概要 点iと点i+1の距離,di与えられる (i=0~N-1) 点0と点Nの距離として考えられる最大値,最小値を求める 解法 最大値は点が一直線に並んだ場合…

AtCoder Regular Contest 9 B. おとぎの国の高橋君

※このエントリは競プロで圧倒的成長 Advent Calendar 2015の20日目のエントリです. 問題 ARCのB問題埋め. 問題概要 AtCoder国では日本と同じアラビア数字を用いている しかし数字の大きさはb0 < b1 <‥‥< b9である AtCoder国の数字がN個与えられるので昇順…

AtCoder Regular Contest 8 B. 謎のたこ焼きおじさん

※このエントリは競プロで圧倒的成長 Advent Calendar 2015の19日目のエントリです. 問題 またARCのB問題 問題概要 看板にしたい文字列と英字キット1袋に文字の列が与えられる 看板を作るのには何セット必要か 解法 看板の文字列に出てきたアルファベットの…

AtCoder Regular Contest 3 B. さかさま辞書

※このエントリは競プロで圧倒的成長 Advent Calendar 2015の18日目のエントリです. 問題 ARCのB問題が全部埋まりそうなので年内に埋めようと思います. 問題概要 与えられた文字列を,辞書順で末尾が若い順に並べ替える 末尾が同じなら末尾から2番めの文字…

結城浩の「マヨイドーロ問題」

※このエントリは競プロで圧倒的成長 Advent Calendar 2015の17日目のエントリです. 問題 ※ 出題が終わってしまったため上記のURLから問題が見られません.「マヨイドーロ問題」で検索すると出題pdfが見られます.(pdfへの直リンクは禁止らしいのでここに貼…

AtCoder Beginner Contest 10 B. 超大型連休

※このエントリは競プロで圧倒的成長 Advent Calendar 2015の16日目のエントリです. 問題 問題概要 AtCoder国の2012年の祝日が与えられるので最大の連休の数を求める 解法 長さ366の配列で2012年のi-1日目が休日がどうかを管理する 1日が日曜のためi%7==0は…

AtCoder Regular Contest 11 B. ルイス・キャロルの記憶術

※このエントリは競プロで圧倒的成長 Advent Calendar 2015の15日目のエントリです. 問題 問題概要 ルイス・キャロルの記憶法によって文字列から数字を復元する 解法 連想配列を知っていればやるだけ問題. しかし,文字列の扱うのが苦手だったりで無限にバ…