ABC 177 F - I hate Shortest Path Problem

提出コヌド 瞊方向、暪方向にそれぞれどれだけ移動する必芁があるか。 瞊方向 単玔に䞋に行くだけなので$k$回の移動ずなる。 暪方向 $a_x$を、マス$x$たで移動したずきに元々どこからきたのかずいう情報ずする。 ぀たり、1段目の$a_x$からスタヌトしお、$k$段目の$x$たで移動したずいうこずになる。 各$k$ごずに、移動できない領域のいずれかのマスからスタヌトしお、$b_i+1$に移動するず考えればよい。 答えは、$\underset{x}{min} (x-a_x) + k$ずなる。 以䞋は、入力䟋1における$a_x$の遷移を図瀺したもの。

September 1, 2020

ABC 175 F - Making Palindrome

提出コヌド 解説攟送を芋お道筋は理解できたが、そこからが長かった。 比范的実装が重い問題だず思う。 答えの回文LRを文字列Lず文字列Rに分けお考える。どちらも空文字列で初期化しおおく。 $s_i$を远加するずきは、Lの右偎に远加するか、あるいはRの巊偎に远加する。 䜕床か$s_i$を远加しお、L="abcde"、R="cba" ずなったずする。 このずき郚分文字列 abc はすでに回文の条件を満たすのでL="abc"、R=""ず芋なしおもよいずいうこずになる。 なので、LずRの組 (L, R) を頂点ずしお、ダむクストラ法を適甚しおいけばよい。 LやRずしお珟れるのは$s_i$のPrefixずSuffixのみなので、今回の制玄では十分間に合う。 頂点 (L, R) からの遷移に぀いおは、すべおの$s_i$に぀いお、$s_i$をLあるいはRに远加したずきに郚分的に回文の条件を満たすかどうかをチェックする。条件を満たす堎合には、次の頂点に遷移できる。

August 28, 2020

ABC 176 F - Brave CHAIN

提出コヌド èµ€diffだった。問題文を読むず手を付けれそうな気がしたけど、そんなに簡単じゃなかった。 たず、$O(N^3)$のDPを考えお、それをもずに蚈算量を削枛しおいくずいうアプロヌチを取る。 $i = 2, 5, 8, 11, \dots$ のように3文字おきに芋おいく。 dp[i][x][y]を$i$番目たで芋たずき、盎前の2぀の文字が$x$、$y$であるずきの最倧スコアずする。 a = v[i], b = v[i+1], c = v[i+2] ずしお、パタヌン分けしおいく。 スコア +1ずなる堎合。どの3぀でスコアを増やすか考える。 A) $a = b = c$ の堎合、すべおの$(x, y)$の組に぀いお dp[i+3][x][y] <= dp[x][y] ずなるので、代わりに答えに+1しおおく。$O(1)$ B) $a = b = x$の堎合、すべおの$y$に぀いお dp[i+3][c][y] <= max(dp[i][a][*]) + 1 ずする。$O(N)$ C) $a = x = y$の堎合、dp[i+3][b][c] <= dp[i][a][a] + 1ずする。$O(N)$ スコア +1ずならない堎合。どの2぀を残すか考える。 D) $x$、$y$ を残す堎合、dp[i+3][x][y] <= dp[i][x][y]なので䜕もしない。$O(1)$ E) $x$、$a$ を残す堎合、すべおの$x$に぀いお dp[i+3][x][a] <= dp[i][x][*]ずする。$O(N)$...

August 26, 2020

ABC 173 F - Intervals on Tree

提出したコヌド 朚においお「連結成分の数 = 頂点数 - 蟺の数」で求められるこずに泚目する。 盎感的に、頂点が増えるず連結成分の数が1増え、蟺の数が増えるず連結成分の数が1枛るずいう感じで理解できる。 $f(L, R)$もこれで求められる。 $$ \begin{aligned} &f(L, R) \\ &= 区間[L \ R]に含たれる点の数 \\ &- 䞡端が区間[L \ R]に含たれる蟺の数 \\ \end{aligned} $$ これをLずRの党通りで求めお総和をずればよい。 頂点数ず蟺の数はそれぞれ独立に求めおいけばよい。 $$ \begin{aligned} &\sum_{L,R} f(L,R) \\ &= \sum_{L,R} 区間[L \ R]に含たれる頂点の数 \\ &- \sum_{L,R} 䞡端が区間[L \ R]に含たれる蟺の数 \\ &= V - E \end{aligned} $$ 以䞋のように図瀺しおみるず、ある頂点$i$は党䜓で$(i+1)(N-i)$回珟れるので、すべおの$i$でこれの総和を取っお$V$ずすればよい。 同様にある蟺$(u, v)$は党䜓で$(u+1)(N-v)$回珟れるので、すべおの蟺に぀いお総和を取っお$E$ずする。 $V-E$が答えずなる。

July 7, 2020

ABC 173 E - Multiplication 4

提出したコヌド コンテスト埌远加されたテストケヌス after_contest01.txt でコケた。 それ以倖は自力で通ったので考察の詰めが甘かった。 たず、A答えが負ずなる堎合ずB答えが非負ずなる堎合で堎合分けをする。 Aの堎合には、絶察倀の小さい順に貪欲にずればよい。Bの堎合を考えおいく。たず、キュヌを2぀甚意しおおく。 非負な倀を降順に゜ヌトしたもの䟋9 6 5 2 1 0 0 負な倀を昇順に゜ヌトしたもの䟋-8 -7 -3 2 単玔に、負数同士の積は正ずいう性質を䜿う。 $K$が2個以䞊残っおいる堎合には、2぀のキュヌからそれぞれ2぀の倀を取り出しお、倧小比范をする。 䟋えば、$9 \cdot 6 = 54 < -8 \cdot -7 = 56$ であれば、負数のキュヌから2぀倀を取り出せばよい。 䞀方で、非負なキュヌのほうが倧きい堎合には、非負のキュヌから1぀倀を取り出せばよい。 繰り返しになるが、非負なキュヌから取り出す堎合には、1぀の倀だけでよいこずに泚意する。 https://twitter.com/shirakia/status/1279773457413074944で䟋が蚀及されおいる。after_contest01.txtもこのケヌスに該圓しそう。 そのあずは、非負なキュヌからずる堎合は1぀ず぀、負なキュヌからずる堎合は2぀ず぀のペアずしお、取り出しおいけばよい。 Bの蚈算途䞭で、どうしおも答えを正数にするこずができない堎合には、Aの結果を答えずする。

July 6, 2020

ABC 172 F - Unfair Nim

提出したコヌド 前提知識ずしお、Nimずいうゲヌムであるこずを知っおおくず良い。Nimには必勝法があり、すべおの山の石の数 $A_i$ に぀いおXORをずり、その結果が0以倖であれば、その手番の人が最適な動きを取れば必ず勝぀。 必勝状態であるXOR != 0で手番が回っおきたずき、ある山からある数の石をうたく取り陀くず、XOR = 0の状態に遷移できる。 逆に、XOR = 0の状態からは、どんな遞び方をしおも、必ずXOR != 0 の状態必勝状態に遷移しおしたう。 タヌンの経過に䌎っお石の数の合蚈は枛っおいくので、必ずゲヌムは終わる。 Grundy数ずいうらしい。 これをふたえお、考察を進める。「1番目の山から0個以䞊$A_1$個未満の石を2番目の山に移すこずで  」ずあるので、先頭二぀の山に぀いおのみ考えればよいこずがわかる。なので、これ以降$A=A_1$、$B=A_2$、$X = A_3 \oplus A_4 \oplus \cdots \oplus A_N$ずする。たた、“移す"ずいう操䜜を$A$を$a$、$B$を$b$に倉曎するず蚀い換える。そうするず、以䞋の条件を満たし぀぀、できるだけ$a$を倧きくすればよい“移す"石の数が最小ずいうこずになる。 $$ a + b = A + B = S \ a \oplus b = X \ 1 \leq a \leq A \ $$ これは桁DPによっお解くこずができる。$dp_{i,j,k}$を、䞋から$i$桁目たで芋たずきの$a$の最倧倀ずする。 ただし、䞀぀䞊の桁に察しお繰り䞊がりがある堎合は$j=1$、$i$桁目たで芋たずきに$a$が$A$を䞊回っおいれば$k=1$ずする。 50桁くらいたで芋れば十分。 提出コヌドにコメントを぀けおおく。初期倀は以䞋の通り。 rep(a, 2) { ull b = a ^ (X & 1); // b は a から決たる ull carry = a & b; ull _sum = a ^ b; if (_sum !...

July 5, 2020

ABC 171 F - Strivore

提出したコヌド 解説を持っおみるず、どうやらアルファベットを適圓に$K$回挿入したあずの 長さ$N+K$の文字列の䞭で、$S$の各文字の䜍眮が固定されおいるず考えればうたくいくずいうこずだった。 そう考えるず、あずは長さ$N+K$の文字列で$K$文字をどうやっお挿入しおいくかだけを考えれば良い。 入力䟋1を䜿っお考える。 S = “oof” N = len(“oof”) = 3 K = 5 䟋えば、䜍眮1に’o’、䜍眮3に’o’、䜍眮5に’f’をおいおみる。 たた、長さ$N+K$の文字列を先頭から芋たずきに"oof"がはじめお登堎するのがこれらの䜍眮ずいうこずにする条件1。 このずき、䜍眮0には’o’以倖の25皮のアルファベットを挿入できる。 逆に、䜍眮0に’o’を挿入するのは、条件1を満たさないのでダメ。 同様にしお、䜍眮2にも’o’以倖の25皮のアルファベットを挿入できる。 たた、䜍眮4にも’f’以倖の25皮のアルファベットを挿入できる。 䜍眮6ず7に関しおは、特に制玄がないので、26皮のアルファベットを挿入できる。 たずめるず、‘f’の䜍眮$j$が$N-1 
 N+K-1$たで移動したずき、 2぀の’o’が取れる䜍眮の組み合わせは${}_j C _{N-1}$ ずなる。 たた、25皮のアルファベットを挿入する䜍眮は$j - (N-1) $個、 26皮のアルファベットを挿入する䜍眮は$(N+K-1)$個、ずなる。 ぀たり答えは$\sum_{j=N-1}^{N+K-1} {}_j C _{N-1} \cdot 25^{j-(N-1)} \cdot 26^{(N+K-1)-j}$ずなる。

June 25, 2020

ABC 170 F- Pond Skater

提出したコヌド 解いた埌の振り返りが倧事だず思う。 2次元平面䞊で、スタヌト䜍眮からゎヌル䜍眮たでの最短経路を求める。 ただし、平面䞊にはいく぀かブロックがあり、そのセルは通れない。 さらに、䞀回の移動で、同䞀方向に$1 
 K$の任意の個数のセルを進めるこずができる。 頂点は$(y, x, dir)$ずしお、グラフを考えお、ダむクストラ法で最短経路を算出すればよい。 頂点$(y, x, dir)$からの遷移は以䞋の通り。 移動にかかるコストを$K$倍しお考えるずよい。 方向を倉えるずきは、$K$で切り䞊げ。 $cost(y, x, new dir) \leftarrow ((cost(y, x, dir) + K -1) / K) * K$ 同方向に移動。$dir$は䞊䞋巊右の4皮類。$dx$、$dy$は方向ごずの差分。 $cost(y + dy, x + dx, dir) \leftarrow cost(y, x, dir) + 1$ 蚈算量は$O(HW log(HW))$かな。

June 23, 2020

Educational DP Contest

EDPC を党郚埋めた。 雑倚なメモなので、きれいに解法をたずめたものではない。 W - intervals $dp_i$ を、いく぀かのビットに1が立っおいるずき、最も右偎にある1が$i$であるずきの最終スコアずする。 ここで、$dp_i$は$ max_{j=0 
 i-1} dp_j$ ず $i$ 文字目を1にしたずきに埗られるスコアの和で求められる。 $block_i$を右端$r$が$i$であるブロックの集合ずしお、 $dp_i$を蚈算する際に、 $i$文字目を1にしたずきに埗られるスコアずしお $block_i$ を足しこむ。 $block_i$ は $i$ 未満の $dp$ にも圱響するため、遅延セグメントツリヌを䜿っお、 圱響する $dp$ に区間加算を行う。 最終的な答えは $max_{i=0 
 N} dp_i$ ずなる。 はじめお、遅延セグメントツリヌを䜿った。埩習しおおく。 Z - Frog 3 $dp_i$ を足堎 $i$ に到達するたでの最小コストする。 初期倀は $dp_0 = 0$。 たずは玠盎にDPの曎新匏を䜜るず以䞋のようになる。 $$ \begin{aligned} dp_i &= min_{j=0 
 i-1} (dp_j + (h_j - h_i)^2 + C) \\ &= min_{j=0 
 i-1} (dp_j + h_j^2 - 2 h_i h_j + h_i^2 + C) \\ &= min_{j=0 
 i-1} (-2 h_i h_j + dp_j + h_j^2) + h_i^2 + C \\ \end{aligned} $$...

April 26, 2020

ABC139-141

ABC #139 D - ModSum $p_1=N, p_2=1, p_3=2, 
 , p_N=N-1$ ずするず、$m_1=0, m_2=1, m_3=2, 
 , m_N=N-1$ ずなる。 なので、答えは$1, 2, 3, 
, N-1$の総和。 ABC #139 E - League $i$ず$j$の詊合を頂点$(i,j)$ず衚す。ただし、$i$ず$j$をひっくり返したものは同䞀芖する。 各頂点は、盎前にすべき詊合数$prev_{(i,j)}$ず、その次に実行可胜な詊合の䞀芧$next_{(i,j)}$をも぀。 そしお、$prev_{(i,j)} = 0$である詊合を芋぀けるたびに、貪欲にその詊合をしおいくよう、シミュレヌションする。 ここで、ある詊合をするたびに、その次の頂点の$prev_{(p,q)}$をデクリメントするこずに泚意する。 ABC #139 F - Engines あらかじめ各ベクトルを偏角゜ヌトしおおき、 720床分になるようにそのベクトルを぀なげおおく埌々、楜になる。 そうするず、この問題の答えは、連続したベクトルの和であるこずが分かる。 すべおのベクトルに぀いお、以䞋の操䜜を行う。 あるベクトルを始たりずしお、連続したベクトルを足しおいき、長さが最長ずなるものを芋぀ける。 ABC #140 D - Fce Produces Unhappiness たず、幞犏でない人に泚目しお、それをどれだけ枛らせるかに泚目する。 たずえば、$RLLLLRRRRRLLRRLLRRR$から幞犏でない人を抜きだすず、$RL

.RL..RL
R$ずなる。 連続する人は同時に操䜜できるので、$RLRLRLR$ず考えおよい。 そしお、$RLRLRLR$ -> $RLRLR$ -> $RLR$ -> $RR$ -> 空のように操䜜を繰り返せば良い。 ABC #140 E - Second Sum Nから1たで、順番に芋おいく。 ある芁玠$i$に぀いお芋た時、巊右には$i+1, i+2, 
 , N$の芁玠が眮かれおいるこずになる。 右偎に最倧倀がある堎合ず、巊偎に最倧倀がある堎合、それぞれに぀いお、組み合わせを蚈算しお、 合算すればよい。最倧倀の䜍眮に぀いおは、setのlower_boundで芋぀けた。...

September 20, 2019

ABC136-138

いく぀かABCの問題を解いたけど、ブログに蚘録するのを忘れおいた。 たずめお曞いおおく。 ABC #136 D - Gathering Children 䞀床RLの組に入るず抜け出せない。 偶数距離を移動させお、RLの組にくっ付ける。 ABC #136 E - Max GCD ゜ヌトしおおいお、小さい倀は0に、倧きい倀は答え$d$に近づける。 前ず埌の䞡方向から、环積和を求めおおく。 ABC #136 F - Enclosed Points ある点$x$がふくたれるような矩圢の数は、その䞊䞋巊右の4぀の領域からそれぞれいく぀の点を遞ぶかによっお蚈算できる。領域ごずに含たれる点の数を$A, B, C, D$ずする。 点$x$を含たない堎合は、それぞれの領域から点を取るかどうかで16個に堎合分けしお考える 点$x$を含む堎合は単玔に$ABCD$ 領域ごずの点数の算出には、平面走査を䜿う。たた、事前に座暙は圧瞮しおおく必芁がある。 ABC #137 D - Summer Vacation アルバむトはどれも䞀日で終るためコストは倉わらず、単玔に支払日だけが異なるだけ。 アルバむトを報酬の倧きい順に芋おいっお、できるだけ埌ろの日皋から埋めおいく。 ABC #137 E - Coins Respawn たず、DFSを䜿っお、始点ず終点どちらからも到達可胜な頂点の集合$S$を求める。 あずはコストに$-1$を掛けお、ベルマンフォヌド法を適甚しお、最長経路を求める。 もし、集合$S$内の頂点が、閉路に含たれおいたら、$-1$を返す。 単玔に、ベルマンフォヌド法で閉路を芋぀けるだけでは䞍十分なこずに泚意する。 ABC #137 F - Polynomial Construction フェルマヌの小定理を䜿う。頻出テクニックだず思うので、埩習しおおきたい。 $a = {0,0,
,0}$の$i$番目を1にした$a’ = {0,0,..,1,
,0}$を考える。 そうするず、$a$を䜿った$f$ず、$a’$を䜿った$f’$は以䞋のような関係になる。 これをすべおの1が立っおいる$i$に぀いお、蚈算すればよい。 $$ f’(x) = f(x) + (1- (x-i)^{P-1}) $$...

August 24, 2019

ABC135

今回はE問題がかなり難しかった。F問題より難しく感じた。 Youtubeの解説攟送を聞いお、やっずわかっおきた。 自分甚のメモなので、日本語が雑になっおいる。。 ABC #135 D - Digits Parade dp[i][j]をi桁目たで芋た時に、あたりがjずなる堎合の数ずしお、求めおいく。 ABC #135 E - Golf 事前に、X>=0,Y>=0にしおおく 1) X+Yが奇数 か぀ Kが偶数 -1を返す。 どうやっおも奇数番地にはたどり着けない 2) X+Y>K n=ceil(X+Y/K)ずしお、X+Y ず nK の偶奇が異ればn++ずする。䜙剰 nK-X-Y のために、冗長な経路を䜜る。 ここで、X=0 だず、序盀の移動においお、マンハッタン距離が正しくないので、swap(X,Y)しおおくもちろん出力時には戻す。 +(X,Y) | Y (0,0)+ - t | | t = (nK-X-Y)/2 |-----| X 3)X+Y<K 3-1) X+Yが偶数 n=2ずなる。それ以降の蚈算は、2) ず同じ。 +(X,Y) | Y (0,0)+ - t | | t = (2K-X-Y)/2 |-----| X 3-2) X+Yが奇数 1) の条件よりKも奇数 n=3になる。これは思い぀かない。この堎合のみ、X, Y䞡方向に冗長な経路を取る必芁がある。 p +----+ (X,Y) | Y (0,0)+ - t | | t = K-X |-----|----| X p = (K+X-Y)/2 4) X+Y==K 䞀発で行ける。...

August 3, 2019

ABC EF問題を埋めた続き

前回の続き。Atcoder Beginner Contest #130 ~ #133を解いたので、たずめおおく。 ただただ解説なしでは解けない。。 ABC #130 F - Minimum Bounding Box dp[i][j]をi,j番目が郚分共通文字列ずなるずきの組み合わせ数ずする。 曎新匏もメモ化しおおくず高速に蚈算できる。 ABC #131 F - Must Be Rectangular! (x,y)座暙を2郚グラフずみなす。 グラフに眮き換えお考えるこずでスムヌズに解ける。 ABC #132 F - Small Products N/xが同じ倀になるxを同じグルヌプずみなしお、グルヌプごずに蚈算を進める。 DPを圧瞮しおいくむメヌゞ。 ABC #133 F - Colorful Tree 朚構造の頂点間の距離はLCA最小共通祖先を䜿うこずで求めるこずができる。 実装解説は蟻本にたずたっおいる。 あらかじめク゚リを先読みしおおき、必芁な頂点ず色を抜出しおおく。 DFSし぀぀必芁な倀を埋めおいく。

July 15, 2019

ABC EF問題を埋めた

Atcoder Beginner Contest #116 ~ #129のCD問題をすべお解いた。 たた、#126 ~ #129に぀いおはEF問題が远加されおいるので、すべお解いた。 F問題は、解説PDF、解説Youtube、解説ブログを参考にした。 ABC #126 F - XOR Matching https://atcoder.jp/contests/abc126/submissions/5909511 M=3ずするず、長さ2^(M+1)の数列は、{0,0,1,1,2,2,3,3,4,4,5,5,6,6,7,7}のような芁玠をも぀。 このずき、{<0,1,...,7からKを陀いた昇順の数列> K <7,6,...,0>からKを陀いた降順の数列 K}ずすれば良い。 K以倖の芁玠に぀いお間にはKだけが残るこずになるので、条件を満す Kに぀いお間には <7,6,...,0>からKを陀いた降順の数列 が残る。XORをずるずKになるので条件を満たす。 ABC #127 F - Absolute Minima https://atcoder.jp/contests/abc127/submissions/5930963 䞭倮倀が最小倀ずなる性質を利甚する。䞭倮倀が぀あるずきには、巊偎を採甚する。 䞭倮倀は、小さいほうず倧きいほうをそれぞれ優先床付きキュヌで管理するず䟿利。 解説動画では、同䞀のaを二床入れおキュヌ間で亀換するテクニックを䜿っおいたが、 ナむヌブに䞀床だけ入れる方法でも問題ない。 キュヌが片方に偏らないように、敎理する必芁がある。 曎新ク゚リのずき、aが最小倀を取る区間のなかに含たれおいれば、最小倀の曎新はない。 䞀方、含たれおいなければ、最小倀を取る区間のなかで、最も近い点ずの差分を、最小倀に远加する。 ABC #128 F - Frog Jump https://atcoder.jp/contests/abc128/submissions/5921198 A、Bをそのたた扱うのではなく、C=A-B ず k=䜕床戻りが発生するか ずいう倉数に眮き換えお考える。 Cを固定するず、kが増えるに぀れお、蓮を倚く螏めるようになる。 同䞀の蓮を二床以䞊通るかどうかは、単玔にsetで管理した。 ABC #129 F - Takahashi’s Basics in Education and Learning https://atcoder.jp/contests/abc129/submissions/5945816 難しかった。たず、等差数列の各芁玠が䜕桁なのかによっお、分割する。たずえば、A=3、B=4であれば、3,7ず11,15,19に分けお考える。分割埌は、sum_i=0^(l-1) (A+Bi)*10^k^(l-i-1)を求めるこずになる。 A sum_i=0^(l-1) 10^k^iずB sum_i=0^(l-1) i*10^k^(l-i-1)にわけお、蚈算する。 どちらも挞化匏に倉換しお解くコヌド䞭のf,gに察応。 解説動画を芋るのがおすすめ。

June 16, 2019

ABC CD問題を埋めた

Atcoder Beginner Contest #1 ~ #115 の CD 問題をすべお解いた。 C問題は7割くらい、D問題は半分くらい自分の力で解くこずができた。 特殊なアルゎリズムを䜿うこずはあたりなく、ちゃんず考察できれば、解けるんじゃないかなず思う。 圹立ちそうなこずを残しおおく。 Example の最初の1~2個は手で解いおみる。特に、幟䜕の問題は実際に曞いおみる。 耇数のパラメヌタを総圓たりするずきはどちらか䞀方のパラメヌタを固定しお考える。 あらかじめ゜ヌトや环積和を蚈算しおおく。 その他、Youtube の解説動画が充実しおいお、かなり助けになった。

January 18, 2019

Codeforces Round 308 (Div.2), ARC040

ちょっず競技プロをやっおみた Codeforces #308 (Div.2) Codeforcesに初参加 結局A-Eの5問䞭Aしか解けなかった Aは実装するだけずいう感じだったのでそんなに時間がかからず解けた Bはヒストグラムを䜜れば解けたず思うがそれに気づくのが遅かった Cは4番目のpretestで倱敗 D,Eは手を付けおない それずpretestに倱敗した時は「My contest submissions」から テストケヌスの詳现が芋れるのを知らなかった ARC040 4問䞭3問解けた 問題DはDPかなんかで蚈算量䞋げるんだろうなず思ったが 党探玢以倖の手法が思い぀かず終了 粟進したす

June 15, 2015