blog2020-02-22ABC156プロコン久しぶりに楽しめたかな。欲を言えばFを通したかったけど。Beginner実装重いと思いながら時間をかけて書いた。n)が0でない問題は酷いけどw)。DigitsKで割っていって何回目で0になるか。まあNは0より大きいので。RallyこれBじゃないの。「整数値の座標」とのことなので全探索した。全探索しない方法もあとで考えたいところ。(追記)時間計算量O(N)、空間計算量O(1)で解けた。いう式になるのは知ってたけど、改めて計算した(こういう計算たまにしないとね)。Bouquetけっこう混乱してしまったが、要するに答えは2^nよりすこし少ないくらいだ。そこから、0本とa本とb本のケースを引き算すればいい(0,a,bは相異なる)。nがでかいので、都度計算するタイプのcombを貼る(計算量はn関係なくO(b)で済む)。RoamingDと同じような感じだが。n-1回移動すればどんな配置も実現できる(最終的に人がいる部屋が少なくとも一つあるのでその部屋の人は動かなくていい)。1回のときは特殊だが、制約はk>=2だった。2回以上n-2回以下は、n>=3なので適当に迂回させればより少ない移動でできた配置は全て実現できる。0の個数がk個以下が実現できてそれ以外は無理なので、もうちょっと高速化できる気もするが、素直に0の個数がi個の通り数を足していこう。0の個数がi個のとき、n-i個に分けるのでn-i-1個の仕切りを入れる。各部屋に1人以上なのでn人からn-i人減らしてn-i-1個の仕切りを加えてn-1個からn-i-1個を選ぶ。0の入れ方はn部屋からi個選ぶ。Modularnessなかなか読むのが大変だけど。aは単調増加っぽいけど停滞することもありm以上になったら戻されたりもして、それでn-1回中何回増えるかと。O(kq)の時間は使えるので、a_0からa_kまでk+1個のシミュレーションを書いた。mだけずれていくんだよね。0以上m未満の範囲で棒グラフみたくしてそこから棒の長さをmにして幅mの箱をずらして、とか考えても無理そう。k個のペアそれぞれについてa[i]<a[i+1]となるようなオフセットの範囲は求まるなと思った。n/k回のループで毎回のずれをstd::setとかに記録して二分探索で(log付いちゃうけど)個数はわかるかなーとか。kが小さいかもしれないことを忘れていた。n/kが5000以下とは限らない。次に思いついたのは、そもそもa[n-1]は求めることができる。基本的には増えていくけど、m以上になったらmを引かれてしまう。増えるはずが減ったということが、a[n-1]/m回くらい起きているはず。いう方針をバグと戦いながら頑張っていたが、dがmより大きいことがある(特に、ずっと大きいこともあるのが痛い)ことを忘れていた。サンプルは通らず終了。m;と最初にするようにした。間違った方針に時間を費やしていては、1時間はあっという間だった。mにすることで解けた。23:59ABC156広告を非表示にするもっと読むコメントを書く2020-02-16ABC155プロコン無限にレート下がるね。水色がちらつくようになってきた。精神状態がはっきり悪い。実力が下がっているのは仕方ないとしても、今の実力は発揮できる状態でいたい。Poorクソムズ(楽な実装が見えない)。3通りをループで回した。Pleaseクソムズ(実装は簡単)。条件を満たすためには、偶数が存在しなくてもいい。チェックする必要があるのは偶数で、3でも5でも割り切れないものが一つでもあったらダメ。いつもの3倍くらい見直してから提出した。最初std::arrayにしてたが、入力でつまづいて、脳への負荷を下げる方針にした。std::mapは実行速度に若干の不安があり使わなかった。ソートしてカウントする。i番目の時点で同じ文字列が何個続いているかを別の配列に入れて(12312111123112みたいになる)、最大値(さっきの列だと3)のところだけ出力する(ソートしてあるので順番に出力するだけ)。ここはいい実装を思いついて気持ちよかった。Pairsまあ二分探索+しゃくとりっていう典型。負の数があるので、実装力か考察力が必要。しゃくとりの代わりに二分探索してTLEしないかは微妙なところ。俺がちゃんと書けば行けるだろうとは思ったけど(後で確認する必要あるな)、しゃくとりのほうが書きやすい面もあると気づいてしゃくとりに。4通りのしゃくとりを書く必要があると気づいたけどそれをなんとかする考察力もなく(ここが今の自分の調子が悪いところ)、4つ書いた。しゃくとり自体は慣れていてすぐ書ける。負の数のときにループを逆に(大きい数から順に)回す必要があるのは最初気づいてなかった(マジで難しいこの問題)。いつまで経ってもサンプルが通らず。自分自身とペアになれないとか入れ替えたものを区別しないとかでサンプルの手計算も複雑になる。結果的に、自作の二分探索がバグっていた。(-3)/2は-2じゃないんだね。自信を持っているライブラリだったのでショックだった。3完かと思ったのでホッとした。レーティングを意識した立ち回りが必要なのかなあ。今回だったら、実装は重いが確実に解けるDではなく、すぐに解法は見えないけど解いてる人が多いEに行くほうがよかったか。解けるとわかっている(早解きできるともコンテスト中に解けるとも言っていない)問題をやってしまうんだよなあ(そして時間がなくなる)。Payment残り10分で問題文は読んであったけどさすがに貪欲を書くしかできず(それを書いたのはえらいが)サンプル合わず終了。いうのを日常生活の中で考えておかないの、弱いなあ。Parallel座標圧縮要らなくない?なんで難しい問題で簡単にできる面倒な操作を加えてるん。座圧なしで解けるやつかもしれんけど。区間の重なりパリティは面白そう。Dでハマっていたため、解いている人が異常に少ないFに注力する精神的余裕はなかった(問題文は読んだ(余裕がないときって読むのに時間かかるんだよねえ))。23:39ABC155広告を非表示にするもっと読むコメントを書く2020-02-09ABC154プロコンE以外の5完。このパフォーマンス値で落ち込むこともできない。Ballsけっこうよどみなく書いていたつもりだけど、1分半かかってしまった。you...Aより簡単。forでsを書き換える方針にした。Not全部大文字のYESかい。ソートして隣同士同じのがないか調べる。Lineこれも簡単、と言いたいところだが、時間がかかってしまった。やることは簡単で、期待値の区間和の最大を求めればいい。結局シンプルにダイス1個の期待値で累積和を持った。Zero解ける問題であることはわかる。問題文や制約が、解法はこれですよと語りかけてこない。いや桁数も少ないしどうやっても解けそうではある。桁DPに見えるんだけど、めんどくさそうだし、Kが小さいことを生かしたくなる。Kが3通りあるのをまとめるのがまた難しい。この辺は力があればできるんだろうなと悔しく思う。最終的に使う3つの数を1000通り固定したら?それも、最上位でNと一致するときしないとき、一致するなら次の数も一致するかという場合分けがめんどい。K固定なら解けそうかなあ。Kが1小さいときに帰着させるのも面倒だよな。解きたくなくてFを覗いて解く自信がなかったので頑張ってEをやってた。21:43に諦めてFへ。Fを解いて戻ってきた。桁DP、というのが何かは置いといて、そういう問題で自分がいつもやってるやつをやった。残り2分で「とりあえず書きあがったか?」という状態にはなったが、サンプルが合わないので終了。まあ最初からKの小ささを使わず桁へ行っとけという話だ。これどうやったら早解きできるのか見当もつかないな。