ABC222感想

結果

先週はお出かけしていて参加できなかったので、2週間ぶりのコンテスト。 1週間参加しないだけで、随分久しぶりな気がしました。 5完を目標にしていましたが、無念。精進不足です。最初の状態から考えると、4完できるようになっただけでも嬉しいです。今月中に1度は5完したいな。。。 f:id:iiko_11:20211009224117p:plain

C問題

活字が苦手で本も読まない私は、問題文の文字の多さに少し気分が悪くなってしまいました。

それぞれの人の勝ち数を多い順に保持していかなければならないことに気づくのに5分かかりました。「番号が小さいほうが強く、勝ち数が大きいほうが強い」っていうような状況下ではどちらか一方をを負の数で保持していくと、sortするときに便利っていうのは他の問題で学んでました。4月の頃の自分だったらこんな発想ありえなかった。少し成長を感じました。

C問題 自分の提出

じゃんけんの勝ち負け判定のスマートさに驚きました。

C問題 神コード

D問題

最初、b[i]-a[i]+1をかけあわせていけば答えじゃん!簡単じゃん!って思ってコードを書きました。そんな私がc[i]>c[i+1]となる状況が生まれるという驚愕の事実を知るのは、7分くらい後でした。己の愚かさに悲しみを抱きながら、998244353という数字があるのでDPあり得るのでは?というセコセコな考えが思い浮かびまして、頑張って実装してみたところ、なんとかACできました。

D問題 自分の提出

E問題

各辺を何回通るか、配列cntに保存。r=(sum(cnt)+k)//2、b=(sum(cnt)-k)//2になるので、そのような塗り分け方を計算したい。「組み合わせ 和」でググったら、動的計画法による数え上げが一番早そう。とりあえず実装して提出!WAとTLEのオンパレード。。。

E問題 コンテスト中のWA+TLDコード

解説見ると、解法が自分のコンテスト中の思考とかなり同じでびっくりして悔しくて、でもちょっと嬉しかった。しかし、何がダメだったのか考えると全部違った。まず、(k+sum(cnt))//2が整数とならない場合を考慮できていなかった。おそらくこれがWAの一因。あと、cnt[i]って書きたいところにiって書いてしまっている自分らしさ全開のミス。そして、最短経路を調べてcntを更新していく過程が間違っていた。何が間違っていたかはわからない。わからないままだから伸びないのかな。。。汚いコードはバグを見つけづらい。神コードを読んで超納得した。次からはできる気がする。さらにはDPの構成が違った。総和xの配列の中から部分和yになるような組み合わせの数を求めたいときは、dp[x]を用意して上から順に更新していき、dp[y]を出力すれば良い。次出たら通せる自信ができたのでよき!dequeの初期化にq.clear()っていうのがあることも知れた。

E問題 コンテスト後のACコード 最短経路を探す部分結構分かりやすいはず!

コンテスト楽しすぎ!