0.はじめに
アットコーダー初参加は、去年のユニークビジョンだったなぁと思いながら参戦。
Cまではそこそこのペースで解けましたが、Dでブレーキ。
結局Cまでクリアで終わりました。
問題難易度は楽しく解けるちょうどよい感じでした。
レートは+10と微増しました。
1.A - Weak Beats
ビットを使って綺麗に解けそうな気もしつつ
回答の早さ優先で単純な実装
Sを読み込んだら、先頭からチェックしていき
偶数番の時(pythonのカウンター的には奇数の時)
0でなかったらフラグを立てる
最後までチェックして、フラグが立っていたらNo
立っていなかったらYesを出力して終了
https://atcoder.jp/contests/abc323/submissions/46282719
2.B - Round-Robin Tournament
ペアを格納するリストを用意
勝敗表を読んでいき
(勝利数、プレイヤー番号*-1)を
リストに格納
リストを降順にソート
リストを順番に読んでいき回答用リストに
プレイヤー番号*-1を格納し
最後に回答用リストを表示して終了
https://atcoder.jp/contests/abc323/submissions/46293606
3.C - World Tour Finals
なかなかしっくりこないややこしい条件があるなと思いつつも
まぁ素直に実装すれば生けるかと取り掛かりました。
結果的に制約的にTLEすることなく行けました。
考え方
プレイヤーごとの得点状況を読み込む際に以下の下準備をしておく
・各プレイヤーの現在の得点をリストSUMに格納
・各プレイヤーの現在正解していない問題の得点を
リストに格納し、降順にソートしたのち
2次元リストmoreに格納
・プレイヤー全員の中で最高の得点をwinに格納
リストSUMをindex iで順に読み込んでいき回答を出力
・win=SUM[i]の時0を出力
・SUM[i]に、more[i]のリストを先頭から足していき
win以上になる個数をカウントし表示
https://atcoder.jp/contests/abc323/submissions/46315812
4.D - Merge Slimes
1時間以上時間が残っていましたが、結局解けませんでした。
コンテスト後解説や、他の方の解答を見てなんとかACにこぎつけました。
最初の考え方
・キーをS_スライムの大きさ、値をCスライムの匹数で
辞書に登録
・辞書Dのキーsを昇順に読み込んで
匹数cが奇数なら変数ansに+1
引数が2以上なら、キー[s*c]にc//2を加算
・↑を繰り返していき辞書Dが空になったら終了
問題点
・keys()で呼び出しながら、その辞書に新たなキーを登録できない
→キーを別項目で切り出して並べかえて参照して・・・等
いろいろ工夫したが、TLEとなる
→コンテスト中はTLE12止まりでした。
解決策
・解説等を見て優先度キュー等を使っても
TLEが外せ無かったのですが、他の方の解答を見て
keysをコピーして使うことで、読み込みながら入力
できることが分かり採用
→それでもTLEが外れず、さらによく考えると、
keysでキーだけ取り出すのではなく、itemsで値も取り出せば
時間早まるなと気づき、(参考にした方のソースを見て気づきましたが)
ほぼ、丸パクリでACとなりました。
https://atcoder.jp/contests/abc323/submissions/46358162
以上