(Div2)Codeforces一昨日と同様、深夜25:35から2時間に渡って行われたDiv2コンテスト。前回の反省を活かして眠気ほぼなしの状態で挑みましたが、何か大切なものを犠牲にしているような気がしています。今回まともに手を付けられたのはC問題まで。いうわけで、さっそくA~Cの3問を振り返っていきましょう。(例によって数式が丸々使えないので、HackMD版のリンクを貼っておきます。任意の整数を選び、数列の0でない要素全てにその整数を加える。与えられた数列に対して、上の操作を繰り返して数列の全要素を0にする。この最小手数を求めよ。一例としてはこんな感じ。この場合はあと4回で全部0にできるので、答えは6回となる。上を見ての通り、一度の操作では数列中の同じ値の要素を全部0に出来る。操作する様子を色々考えれば、答えが数列の異なる要素の数であることが分かるだろう。これはカウント配列やsetを使えば容易に実装できる。0を要素としてカウントしないように注意。サンプルに含まれていたのが良心的。N)とすることで明示的にし、さらに変数名を節約している。以前AtCoderで見かけて以来、愛用している記法だったりする。a)は別としてカウントする。Multiple)解説(数学Aの整数の知識を存分に使います。b'xとおくとa',b'は互いに素となる。b'と表せるので、このa'を全探索すればいい。y'を全探索すると上の制約から余裕でTLEとなる。√y'の範囲に絞ればいい。素数判定で定番のやつである。b'の場合が挙げられる。bなので2つではなく1つとしてカウントしなくてはならない。b)がそもそも存在しないので答えは0となる。実装方法によってはこれで落ちる可能性もあるので、最初に弾いておくのが吉。0;}見た目の通り完全に整数の問題。Sumとどことなく似た空気を感じるが、無論こっちの方が全然簡単。AtCoderなら内容的には300点レベル、さらに実装で+50点くらいか。絶妙にバグが発生しやすい構造をした問題である。事実、コンテスト終了時点でB,Cの正解者はそれぞれ1,324人、1,341人となり、なんとCの方が正答者数が多いという異例の事態に。Bとしては難問の部類に入るだろう。TLでも哀しみの声が観測された。服を入れると1ヶ月後に服が2倍になるという不思議なタンスがある。そのタンスは服を2倍にした後、50%の確率で中の服を1着だけ食べてしまう。1年の最後の月だけは、服が食べられることはない。1例えばタンスに3着の服が入っていたとする。この1ヶ月後にはタンスの中の服は2倍の6着になっているのだが、50%の確率でそのうちの1着が食べられてしまう。1ヶ月後の服の数は50%の確率で5着、50%で6着ということになる。ナーシャは新年にこのタンスを貰い、x着の服をその中に入れた。7で割った余りを求めよ。先に言ってしまうが、この問題も完全に数学である。計算過程リンク解説にも数式を大量に使うわけで、いかんせんここに書くのは不可能なレベルとなってしまった。いうわけで、計算過程を書いたHackMD版のリンクをここに貼っておきます。7で割ったものを出力すればACとなる。値の累乗は「ダブリング」というテクニックを使うことで対数オーダーで計算することができるので、バカみたいにデカいkの制約にも余裕で対応できる。コーナーケースただし、これをそのまま実装すると落ちてしまう(pretestが通るかは分からない)。0がコーナーケースなのだ。0のときは明らかに答えは0だが、上の式に代入してもそうならない。これは式を立てる時点で、「そもそも食べられる服がない」という状況を考慮していないために起こる。存在しない服を食べ続けてしまうことになるため、期待値が負に発散してしまうわけだ。いうわけで、ちゃんと最初に弾いておこう。0;}実装は軽い方だが、現実世界での前計算が慣れてないと大変。ダブリングは毎回実装するのは少し面倒な上、modの逆元2を求めるのにも使うので私はライブラリ化している。記事を読んでいただければ分かる通り、数学色の強いコンテストだった。D問題も連続部分列の積と和とかいう話だったので、全体としてもそういう傾向だったのだろう。私も伊達に東大に受かってないので、この手の問題は得意な方。前回の雪辱を果たし、無事3完を達成できた。Dは残念ながら歯が立たず。次のコンテストは実質4日後の6/24深夜。次こそはキッチリ決めて紫に上がりたいところ。なんで最後の月だけ例外扱いかというと、単に答えが小数になってしまうためだと思われる。n-1と書いたりする。「nで割る」という演算はmod系ではそのまま出来ないのだが、これを「n-1を掛ける」という演算で代用することができる。2」で逆元が求められ、この累乗計算にダブリングを使う。解説ABC106の解説。A~Cは穏やか、D難しめ。前編(A-C)久しぶりの解説記事。解説ARC099といいつつ実質ABC101の解説。D問題の解説がキツい。(Div2)の振り返り。公式はてなブログをはじめよう!misteerさんは、はてなブログを使っています。ブログを報告するスターをつけました引用をストックしましたストック一覧を見る閉じる引用するにはまずログインしてくださいログイン閉じる引用をストックできませんでした。再度お試しください閉じる限定公開記事のため引用できません。