0.はじめに
緑を維持できるよう気合を入れて臨みました。
Cがやや難しかったですが、まぁ、順調にA~Cは解けました。
Dは典型的な問題かと思いましたが、結局解き方が思いつかず
時間切れとなりました。
解説見たら行けるかと思いきや、ちょっと受け止め切れていない感じです。
ただ、全体的な難易度が高かったのか、レートは+2とちょっと持ち直しました。
1.A - Exponential Plant
サーッと呼ん、単純に2の日数-1乗で比較したら間違っていて
前日分に加算することでうまくいきました。
https://atcoder.jp/contests/abc354/submissions/53587600
2.B - AtCoder Janken 2
問題を読んでもシチュエーションが全くしっくりこない感じでしたが
心を無にして書いてある通りで実装しました。
【考え方】
・SとCを読み込みCは合計Tを求めるため加算
・SはリストLに格納し、後で昇順ソート
・SとCの入力後、TのNmodをi取り、Lのi番目を表示して終了
https://atcoder.jp/contests/abc354/submissions/53594461
3.C - AtCoder Magics
シチュエーション的にはイメージがつかみやすい問題でした。
実装となると、意外と悩みましたが、O(N)+ソートくらいでいけば
大丈夫だろうと実装しました。
前提として AとCはそれぞれ重複が無いというのを見落として
若干複雑になった気はします・・・。
【考え方】
・カードを強い順でならべる。
・一番強いカードは生き残りにいれる
・以降のカードは以前のカードのコストより小さかったら捨てる
・最後に生き残りをソートして出力
【実装】(カードの強さとコストが同じ場合もある考えです)
1.Nをインプット
2.カード用リストLを空で初期化
3.AとCを読み込みLに格納
格納方法:(強さ:A,コスト:C,カードの順番:i+1)をタプルでアペンド
4.Lを降順ソート
5.先頭の強さMAにLの先頭レコードの強さを格納
6.直前の強さCAにLの先頭レコードの強さを格納
7.直前の強さまでのコスト最小値CCに先頭レコードのコストを格納
8.現在の強さ内でのコスト最小値CC2に先頭レコードのコストを格納
9.回答用リストansに先頭レコードのカードの順番を格納
10.Lを2レコード目から見ていく
-1.現在のレコードの強さがMAと同じとき
(強さが同じならコストが小さくても捨てないという勝手な仕様)
--1.現在のレコードの順番をansに追加
--2.CCに、CCと現在のレコードのコストの小さい方をセット
-2.現在のレコードの強さがMAと異なりかつCAと同じとき
--1.CCが現在のレコードのコスト以上の時
---1.現在のレコードの順番をansに追加
---2.CC2に、CC2と現在のレコードのコストの小さい方をセット
-3.現在のレコードの強さがMAとも異なりかつCAとも異なるとき
--1.CAに現在のレコードの強さをセット
--2.CCにCC2とCCの小さい方をセット
--3.CC2にCC2とCCの小さい方をセット
--4.CCが現在のレコードのコスト以上の時
---1.現在のレコードの順番をansに追加
---2.CC2に、CC2と現在のレコードのコストの小さい方をセット
11.ansを昇順でソート
12.ans内の要素数を出力
13.ans内の値を出力
無駄に複雑な実装になってしまいましたが、まぁAC頂けました。
https://atcoder.jp/contests/abc354/submissions/53609884
以上