1
0

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

以上

1
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
0