ferinの競プロ帳

競プロについてのメモ

AGC028 C - Min Cost Cycle

問題ページ サンプル2眺めてたらA,Bまとめて小さい方からN個取れるとうれしい気持ちになって他のサンプルもそれであったのでそれで考えた。大体合ってたけどB問題で時間溶かしたら詰めきれなかった。 解法 A,Bまとめて小さい方からN個取ったときにハミルトン…

AGC028 B - Removing Blocks

問題ページ i番目がカウントされる回数= sum_{j=1}^N (j番目を取り除く時にi番目と連結なパターン数) までは考察できたけど連結なパターン数を求めるパートで無限に詰まって終了した。数え上げで全通りの数え上げは実質期待値と同じなので確率っぽい考え方が…

ARC102 E - Stop. Otherwise...

問題ページ 考えたこと 出目i,jを使わずにK面サイコロをN個降る組み合わせ数がわかればよさそう dp[i][j] = (i面サイコロでj個振るときの出目の組み合わせ数) とする これは実質パスカルの三角形なので dp[i][j] = dp[i-1][j] + dp[i][j-1] としてO(N^2)で求…

AGC012 C - Tautonym Puzzle

問題ページ 1を2個並べると1(=2^1-1)通り、1を4個並べると7(=2^3-1)通り、1を2n個並べると2^(2n-1)-1通りみたいになってるのでうまく2べきっぽいのを作って貪欲に取るみたいな方針でハマって終了した。回文系でよくあるんだし片方は固定してしまってもう片方…

AGC021 C - Tiling

問題ページ 考えたこと HとWが偶数だと考えやすそう Wが奇数だったら1列分どう頑張っても1種類目のタイルを置けない なので1列分2種類目のタイルを敷き詰めてしまってよさそう Hが奇数のケースも同様に1行分1種類目のタイルを敷き詰めてよさそう これでHとW…

AGC024 C - Sequence Growing Easy

問題ページ 考えたこと sampleを試すと数をつくるには 0,1,2,3,4,5,… と1ずつ増える列を組み合わせてつくる以外不可能そう i < a[i] となるiがあれば a[i] を作るのは不可能なので-1 0,0,2,3 のような2以上増えているような列は作れるか? 一回x[1]=1にした…

AGC009 C - Division into Two

問題ページ 考えたこと 集合を2分割する系なのでDPを考える 集合に入っている要素のうち一番大きい要素が大事 集合が空のときを考えるのは面倒なのでX,Yには-infが入っているものとしておく dp[i][j] = (集合にs[i]まで挿入していて、Yに最後に入れた要素がs…

AGC006 C - Rabbit Exercise

問題ページ 解説を読んだ。 解法 数式で扱いやすい形に変形 公式解説にある通り対称な位置の計算、位置の期待値の計算を扱いやすい形(置換)に変形する。 置換をダブリングで高速に計算 K回置換を計算するのは二分累乗、ダブリングの要領で高速にできる。置換…

AGC026 B - rng_10s

問題ページ 思考過程 よくわからないのでサンプルを試してみる i日目の昼にxで回ってきたら次に補充されるタイミングには x%b 個になってそう x%b > c であれば補充できず、mod bなのでb未満なので続けられなくなる よくよく考えてみると b > c のときとかが…

JAG夏合宿2018 day3 D - Prefix Suffix Search

問題ページ 解法 単語のリストwをソートしたものを使うと二分探索で接頭辞がpの単語の集合がわかる。各単語を反転したリストw_invをソートした物を使うと二分探索で接尾辞がsの単語の集合がわかる。wとw_invをそれぞれ座標軸にとった二次元平面上にプロット…

Typical DP Contest K - ターゲット

問題ページ 解法 円なので2次元っぽいが円の中心のy座標が0なのでこれは1次元の問題である。各円は[x-r,x+r]の区間に置き換えられこの区間でK重に内包されているよな区間があればそれはレベルKのターゲットである。区間がたくさん来たので終端でソートしてみ…

JAG夏合宿2018 day2 J - AB Sort

問題ページ 解法 解説にある通りAを+1, Bを-1に置き換えて累積和を取って標高図を書いてみる。操作を終えたあとの最終的な文字列はA…AB…Bとなる。標高図のminが最終的な標高図のminになるまでとそこから標高図のmaxが最終的な標高図のmaxになるまでの2つに分…

JAG夏合宿2018 day2 F - Point Sequences

問題ページ 解法 直線の交点を求める操作はO(1)でできるので点列dを作成していき新たな交点を作成できないような状況になればそれが何回目か出力するとすればよい。ただし普通にlong double等で計算すると公式解説の通り誤差がとんでもないことになる。分数…

JAG夏合宿2018 day2 E - Self-contained

問題ページ 解法 問題の条件を満たす集合は以下の2通りである。 等差数列になっている 0, x, 2x, 3x, 4x, 5x, … 0 a b a+b の形になっている (a=bもa=b=0もありえる) 等差数列であればどのような2数を選んでもその差が集合に含まれている。等差数列は各公差d…

ABC106 D - AtCoder Express 2

問題ページ D - AtCoder Express 2 解法 区間がたくさん与えられるときはとりあえず終点でソートする。あるクエリ(p[i],q[i])が与えられるとき、数える対象となる路線はr[j]<=q[i]であるような路線のみである。したがって終点ソートしておき尺取法の要領で対…

Codeforces Round #499 (Div. 2) E. Border

問題ページ Problem - E - Codeforces 考えたこと k進数の下一桁はkで割った余りに等しい a[i] mod k を取っておいてよさそう dp[i番目][金額]=(bool)とかしたいけど10^10なので無理 a[i]がkと互いに素なら0~k-1まで全て取りうる a[i]がkと互いに素でない場…

Codeforces Round #499 (Div. 2) D. Rocket

問題ページ Problem - D - Codeforces 考えたこと p[i]を把握しないといけない y=INFを出力しようと思ったけどだめなのでy=1を出力して確認する p[i]さえわかれば二分探索すればよい m<=10^9ならクエリ回数30回あれば足りる 二分探索を実装して出すと通る y=…

Codeforces Round #499 (Div. 2) C. Fly

問題ページ Problem - C - Codeforces 考えたこと 燃料xを積んだときに旅行を達成できるか?を考えると単調性がある 判定O(N)でできそうなのでにぶたんできそう 燃料を10^9までしか使わないことが保証されている -1の判定はこれを使えばできそう 不等号に=を…

CODE FESTIVAL 2016 Grand Final C - Cheating Nim

問題ページ C - Cheating Nim 考えたこと Nimの勝利条件から問題文を言い換えたい 不正者が勝てるのは a[0] xor a[1] xor … xor a[n-1]=0 のときだけ 山の石の数を-1する操作で上の条件を達成する問題になった xorなのでビットごとにみたくなるので2進数の形…

yukicoder No.235 めぐるはめぐる (5)

問題ページ No.235 めぐるはめぐる (5) - yukicoder 解法 HL分解の練習として解いた。クエリ0は街Xから街Yに対してC[i]*Zを加算するクエリ、クエリ1は街Xから街Yの値の和を求めるクエリになる。区間に対しての加算と区間和を求めるものなので遅延セグメント…

NJPC2017 H - 白黒ツリー

問題ページ H - 白黒ツリー 解法 頂点に関する制約条件を扱うのは大変なので辺のコストの条件に置き換える。両端の頂点の色が違う辺のコストは0、両端の頂点の色が同じ辺のコストは1とする。こうするとクエリ2について頂点uとvの2頂点間の距離が0かどうかの…

Codeforces Round #500 (Div. 2) D. Chemical table

問題ページ Problem - D - Codeforces 考えたこと sampleを眺める 1列を埋めたあと1つもない列に1個ずつ配置すると最適な置き方な気がした 列iに要素がa[i]個あるときh-max(a[i])個で1列埋めたくなる 列iと列jに同じ行の要素があるとき、この2つの列はマージ…

SoundHound Programming Contest 2018 Masters Tournament 本戦 B - Neutralize

問題ページ B - Neutralize 解法 DPをする。dp[i] = (区間[0,i]の最大値) とする。遷移について考えると max(dp[j]) (0<=j<=i-k) dp[i-1] + b[i] 0 (k-1<=i) の3通りになる。上から順に区間[j,i]を0にする、i番目の薬について0にせず足す、区間[0,i]全体を0…

AOJ2236 Rabbit Plays Games!

問題ページ Rabbit Plays Games! | Aizu Online Judge 考えたこと 項目が多すぎるのでまとめたい まず敏捷sについて関係あるのは自分より早く動くか遅く動くかだけ 敏捷の差とか考えたくないので無視したい 戦闘前に自分より早く動くやつにダメージをもらう…

yukicoder 710 チーム戦

問題ページ No.710 チーム戦 - yukicoder 考えたこと 二人でスケジューリング問題をしましょうみたいな問題 どうせ貪欲かDP 制約小さいしとりあえずDPを考える dp[i問目][男がj秒][女がk秒] = (この条件が可能か) のDP 状態数が多すぎる dp[i問目][男がj秒] …

yukicoder 709 優勝可能性

問題ページ No.709 優勝可能性 - yukicoder 考えたこと 各パラメータで一番大きい値とその人を持てばいいだけでは?と思って書く サンプルで落ちる 冷静に読むと同じ値が複数出てくる 各パラメーターjで一番大きい値を取る人の集合cnt[j]を持っておきたくな…

ABC100 A - Happy Birthday!

問題ページ A: Happy Birthday! - AtCoder Beginner Contest 100 | AtCoder 解法 a <= 8 && b <= 8 なら条件を満たしているのでYay!、違うなら:(を出力する。 abs(a-b) <= 1 ならとか考えてたら2分かかってしまった。 ソースコード #include <bits/stdc++.h> using namespac</bits/stdc++.h>…

ABC100 B - Ringo's Favorite Numbers

問題ページ B: Ringo's Favorite Numbers - AtCoder Beginner Contest 100 | AtCoder 考えたこと ちょうど0回割り切れるって何だと思ってサンプルを見たら1回も割りきれないことっぽい nの後ろに'0'を2d個つければいいでしょと思って投げる 落ちてて何事かと…

ABC100 C - \*3 or /2

問題ページ C: *3 or /2 - AtCoder Beginner Contest 100 | AtCoder 考えたこと 全ての要素に対して2で割るか3倍するのどちらかをするのかと思う 全てのiに対して3倍するって何のことだと思って数分が経過する 操作1回につき各要素について2で割るか3倍する…

ABC100 D - Patisserie ABC

問題ページ D: Patisserie ABC - AtCoder Beginner Contest 100 | AtCoder 考えたこと 与えられる値が全て正だったらx[i]+y[i]+z[i]が大きい方から取ればいいだけ 最大化するのは絶対値で負がある それぞれ正負を試せばいいのでは? 正負を固定すればソート…