【AtCoder】ABC178参加記

競プロが久々になってしまいましたが参加してきました。全完84分+2ペナでした。

以下コンテスト中の思考

A - Not

https://atcoder.jp/contests/abc178/tasks/abc178_a

xor 1で答えになりそうだけどミスっても嫌なので素直に場合分けしました。

B - Product Max

https://atcoder.jp/contests/abc178/tasks/abc178_b

正負で場合分け色々するのも良いんですが、最大は端点になるはずなので、

ac, ad, bc, bdを計算して最大を出力すると楽だと思います。

C - Ubiquity

https://atcoder.jp/contests/abc178/tasks/abc178_c

ぱっと見るとまず包除原理が思い浮かび、0が無い、9が無い、どちらも無いを計算したら答えを計算できるような気がします。が、突然不安になって、今0, 9どちらもない、0が無い、9が無い、両方あるを状態に持ってDPしました。

dp[i+1][3] = dp[i][3]*10 + dp[i][1] + dp[i][2]
dp[i+1][2] = dp[i][2]*9 + dp[i][0]
dp[i+1][1] = dp[i][1]*9 + dp[i][0]
dp[i+1][0] = dp[i][0]*8
D - Redistribution

https://atcoder.jp/contests/abc178/tasks/abc178_d

項数が決まっていて、総和がsである数列の数は○と|を並び替えるよくある重複組合せになるので、項数を全探索した。

項数がi項の場合はsから3*i引いて上記の問題を解けばよくて、せいぜい1000項しかないので大丈夫

E - Dist Max

https://atcoder.jp/contests/abc178/tasks/abc178_e

マンハッタン距離といえばx, y = x-y, x+y

後は回転後の座標差の大きい方を選ぶと答え

F - Contrast

https://atcoder.jp/contests/abc178/tasks/abc178_f

反対から埋めれば真ん中らへんで1個被るから調整すればいい?と思うものの順位表からやたらペナ貰ってる人が多いことからもうちょっと複雑なんじゃないかと考える。

とりあえず同じ数字がn個超えてたら駄目。

ソートされてるのでなんかずらしたら行けそう?と思うもののそこからその方針で行けず。

A, Bの数字をあわせて大きい方からn個の数字を取って並べてA, Bにもう一回戻すと、残りの数字は適当に埋めれば良さそうだと考える。

もちろん、足が出る事があるので、その場合はソートされていることから埋まっていくなら回転させながらやれば良さそうだと思って両端キュー使ってぐるぐる回しながらかぶらないように埋めました。証明はちゃんとはしてないけどまあ合ってそうだとは思った(しそれが思いつくならずらすとかぶらない範囲を全部の数字で調べて共通範囲求めれば良かったねという話になってしまうね)

提出一覧

All Submissions - AtCoder Beginner Contest 178

感想

久々の黄パフォうれしい

Fなんとか実装しきれたけどもうちょっと考察詰めても良かったかも