2017-03-01から1ヶ月間の記事一覧

Codeforces #406 (Div. 1) B: Legacy

解法 セグメント木の上でダイクストラ セグメント木にある各頂点でダイクストラする。もう少しきちんと説明する。まず、操作2について考えてみるv->[l, r]であった。[l, r]は、セグメント木のいくつかの対応する頂点に分解できる。(図1)この頂点はたかだかlo…

yukicoder #492: とても長い数列と文字列(Long Long Sequence and a String)

解法 f(n)を文字列にしたものをS(n)とする。|S(n)| = 2|S(n)| + (n^2の桁数)更に|S(4)| = 16 = 2^4なので|S(60)|>2^60 が成り立つ。よってR<|S(60)|であり、K>60の場合は、K=60と見なしてよい。以下、1<=K<=60とする。f(n)の各桁の値d(0~9)の出現数をcnt[n][…

SRM 710 DIV1 Easy: ReverseMancala

解法 入力例(0)、(1)からわかるように、Bの操作の逆はAの操作で、Aの操作の逆はBの操作で表せる。なのでstartとtargetの両方にAの操作を適用してある状態(かりにSとおく)にできればよい。つまりstart->(Aの繰り返し)->Sかつtarget->(Aの繰り返し)->Sとなるよ…

Codeforces #403 (Div. 2) F: Innokenty and a Football League

解法 行列の累乗みたいなことをするには、 O(ビット数*n^3) で間に合わない。 実はbitsetを使えば十分速度が出せる。 メモリや実行速度が十分でないbool変数を使った解法は、bitsetを使うだけで間に合う場合がある。 最大の移動回数を求めるには、 0111<1000…

Codeforces #403(Div. 2) E: Underground Lab

解法 k人のクローンがいてそれぞれceil(2n/k)個の頂点を訪れることができるので、訪れることができる頂点の数の合計Sは S = ceil(2n/k)*k >= 2n 与えられたグラフは連結グラフなので全域木が存在する。与えられたグラフのある全域木Tについて考える。 TでDFS…

Codeforces #403 (Div. 2) C: Andryusha and Colored Balloons

解法 木の問題は、根付き木にすると見通しが立てやすくなることが多い。 根から再帰的に色を塗っていく。 ある頂点vの色をcur_col, 親の色をpar_colとする。また、部分木vのうち色が決まっているのはvだけとする。子の色を決めたい。問題文中の色を塗る条件…

Codeforces #403 (Div. 2) D: Innokenty and a Football League

解法 各チームについてshort nameの付け方は2通りある。 また、それぞれのチームのshort nameの関係は、いくつかの包含関係で表せる。 2値変数Aが真であることをa、偽であることを¬aのように表すと (x[1]=>x[2])∧(x[2]=>x[3])∧(x[3]=>x[1])∧(¬x[3]=>x[2])∧(¬…

SRM 708 DIV1 Medium: PalindromicSubseq

X[i]の値を具体的に求めていこう。 各文字S[i]についてそれぞれX[i]を求める。S[i]がある回文に含まれる場合、S[i]と一致するようなもじS[j]がある。ただし、i=jでS[i=j]が奇数長回文の中心である場合も含む。iとjを総当りで固定した場合、それだけでO(N^2)…

Codeforces #402 (Div. 1) B: Bitwise Formula

解法 AND, OR, XORのいずれもビットごとに独立に計算されることに注目する。ボブの選ぶm桁の数値(仮にxとする)は、各桁独立に求められる。各桁は0か1の2通り。それぞれ試して各変数のm桁目を求めて和をとり、最小値、最大値に対してそれぞれ適切なほうを選ぶ…