2020-06-01から1ヶ月間の記事一覧

Codeforces Round #653 (Div. 3) - E2. Reading Books (hard version)

問題リンク 解説 基本的にE1と同じで、AliceとBobが両方好きな本を使った数を固定した全探索をします。 このとき、at least を満たすようにとってまだ冊に届いていない場合、使っていない中で小さいほうからとっていくのが最適なのは明らかでしょう。 あとは…

Codeforces Round #653 (Div. 3) - F. Cyclic Shifts Sorting

問題リンク 解説 まず与えられる操作は偶置換なので、もし値が全部異なるなら、ソート済みの数列と与えられる数列の置換の偶奇が違えばその時点で-1です。そうでなければ、適当に操作すれば答えが出ます。 以下同じ数字が存在するものとします ここでいった…

Codeforces Round #597 (Div. 2) - F. Daniel and Spring Cleaning

問題リンク 解説 を満たすが存在する は となるが存在する と同値です。ここまでくると後は桁DPで dp[i][j][k][l] := i bit目までみたとき、j(すでに下限を超えたか)、k(すでに上限を下回ったか)、l(すでに二つの大小関係は満たされたか) の桁DPを丁寧にしま…

yukicoder - No.147 試験監督(2)をそこそこ高速に解く

問題リンク リンクについてる解説が結構どれもTLEが厳しそうでしたが、300msぐらいで通ります。 解説 フィボナッチ数列になるのは他の解説を参考にしてください。 ここまでくると求めるのは になります。 フィボナッチ数列は普通に行列累乗で求めても高速に…

yukicoder No.1097 Remainder Operation

問題リンク 解説 想定より少し計算量が悪いですが、ダブリングをしていきましょう。 現在の和と行き先だけもっていればそれでとけます。 提出コード yukicoder.me

yukicoder No.1099 Range Square Sum

問題リンク 解説 ある値にを加算すると、 となります。 よって、 となって遅延セグ木に乗るので乗せたらおしまいです。 提出コード yukicoder.me

CODE FESTIVAL 2014 Middle - C - eject

問題リンク 解説 行列累乗をすればいい。 ただ愚直にやると精度上の問題でおちてしまう。 ここで行列累乗の誤差対策として、正規化を行う。 具体的には「スイッチが押される確率+ スイッチが押されない確率」は必ず1なのでそこが1になるように正規化する。 …

Codeforces Round #143 (Div. 2) - E. Cactus

問題リンク 解説 閉路の中に閉路がないという条件なので、閉路を圧縮して1つの頂点とみなしましょう。そうすると、木になります。 この閉路を圧縮した頂点を通るときは、2通りの通り方があるので2倍するといいです。 適当に前計算をすれば、各クエリで解くこ…

Codeforces Round #602 (Div. 1, based on Technocup 2020 Elimination Round 3) - D2. Wrong Answer on test 233 (Hard Version)

問題リンク 解説 右隣と同じならば、どの数字を選んでも点数に差がでないです。 以下、右隣と違うものを考えます。 右隣と違うものが個あるとしましょう。 右の数字を選ぶ→点数の差が+1 左の数字を選ぶ→点数の差が-1 どちらも選ばない→点数の差がそのまま と…

Codeforces Round #602 (Div. 1, based on Technocup 2020 Elimination Round 3) - C. Arson In Berland Forest

問題リンク 解説 問題文に与えられた入力をそのまま扱うのはちょっとやりにくいので、.でまずは囲ってしまいましょう。 そうすると、この問題は明らかに単調性があるので二分探索で解けます。 秒で可能かどうかを判定できれば、後はこの問題はとけました。 …

Codeforces Round #518 (Div. 1) [Thanks, Mail.Ru!] - B. Multihedgehog

問題リンク 解説 イメージとしては重心分解です! 1-multihedgehogにおけるcenterは木の中心になっています。(そしてこの木の直径は2です。) 2-multihedgehogになると木の直径が2つふえるだけで、centerの位置はかわりません。 一般に-multihedgehogから -mu…

yukicoder - No.1084 積の積

問題リンク 解説 まず0がある場合、あきらかに0なので0と出力します。 を固定したときの、はあきらかに単調性があります。 よって尺取り法です。 尺取り法をする際に、現在の積とを固定したときの、現在までの積の積を持ちながら尺取り法をすれば、繰り返し…

yukicoder - No.1083 余りの余り

問題リンク 解説 任意の非負整数に対して、 となります。よって 一番小さい値は必ずmodを取られます。それ以外は取るかどうかをえらぶことができます。(選ぶ奴は降順に、選ばないやつは最小値の後にmodをとればいい) これで全探索できるので、求めることがで…

yukicoder - No.1085 桁和の桁和

問題リンク 解説 ある整数の桁和を繰り返していくと、基本的には9で割った余りになる。ただし、9で割った余りが0の場合がやっかいで、 となる。ここまで分かれば、あとは簡単で、 遷移は簡単です。 提出コード yukicoder.me

CODE FESTIVAL 2014 予選A - D - 壊れた電卓

問題リンク 解説 真面目にbitDPをしてももちろんいいのだが、制約が小さいので予め使える集合を全探索する方針をする。 そうすると、その使える数字の中で桁DPをすればいい。 bitDPをしなくていい分気持ち実装が楽 提出コード atcoder.jp

Codeforces Round #650 (Div. 3) - F2. Flying Sort (Hard Version)

問題リンク これの制約が緩いのが、AtCoderの過去問にあるので、これは理解してるという前提で書きます。 解説 座圧して、数値はにあるものとします。 この問題とAtCoderの過去問との唯一の違いが同じ数字を含むというところである。 ある数値が連続するsubs…

Codeforces Round #628 (Div. 2) - F. Ehab's Last Theorem

問題リンク 類題 と聞いてたのに、こっちのほうがかなり難しいじゃないですか( ;∀;) 解説 とします。 全域木をとってきて、根つき木としてかんがえましょう! 根から順にみていって、全域木に使っていない辺を1つつかって、サイクル長が以上のサイクルを作…

ナップサック問題の半分全列挙をO(2^{n / 2})で解く

少し話題になったので、自分のメモも兼ねて 2ⁿ パターン列挙してソートする Θ(2ⁿ log(2ⁿ)) = Θ(n2ⁿ) と比べて n が落ちる半分全列挙でこれを使って、最後の合わせるパートも尺取で n を落とせるのでオーダーが落ちます— 熨斗袋 (@noshi91) June 13, 2020 方…

CODE THANKS FESTIVAL 2017 - F - Limited Xor Subset

問題リンク 解説 が作れるかどうかはxor基底を管理しておけばいい。 自由に決めれる要素数はなので解はになる。 計算量は 提出コード atcoder.jp

yukicoder - No.1077 Noelちゃんと星々4

問題リンク 解説 広義単調増加な数をつくればいいので、欲しいのは直前の情報だけでいいのでdpをしたくなります。 ここで作る数列は としていいです。こうなると簡単にdpが定義できて、 となるでしょう。 後は遷移ですが、広義単調増加でないといけないので…

yukicoder contest - No.1076 寿司打

問題リンク 解説 要求される誤差も緩く、指数関数的に確率はへっていくので愚直にやってもACできます。 単語目を打てる確率はです。 提出コード yukicoder.me

2017-2018 ACM-ICPC Southeast Regional Contest (Div. 1) - Ducks in a Row

問題リンク (コンテストページです) 解説 文字が1つ以上区間を開けて、個作るわけですから、ならば作ることはできないので、-1を出力します。 以下 であるものとします。 この時、なわけですから、が間に合うということに注意しましょう。 そうすると あとは…

Codeforces Round #190 (Div. 1) - B. Ciel and Duel

問題リンク 解説 全部のモンスターを倒す場合 これは明らかにDEFのをギリギリ倒せるやつで倒してから、殴るのが最適 それ以外 この場合は最小費用流で解ける。 攻撃しないモンスター用の頂点を用意しておこう! 提出コード codeforces.com まとめ 普通に全部…