LoginSignup
1
2

0.はじめに
 キーエンスの名を冠しているので難しいと勝手に思い込み
 B,CでAC取れなかったのを何か見落としている条件があるんだ!と
 探してしまいました。

 結局ただのバグだったため、本来であればもう少し早くAC到達していたんだろうな
 と思える、惨憺たる結果でした。

 D問題も、時間があったら解けそうと思いましたが、翌日取り組んでみたら
 がっつり数時間かけ、解説を読み込んでやっととけたので、どちらにせよ
 C止まりではあったと思われます・・・。

 そんなこんなでレートも-30。緑どうこう言える次元ではなくなってまいりました。

1.A - tcdr
 先週学んだ文字列をリストに格納する方法で格納し
 順に呼び出しつつ、aiueoでない場合は回答文字列に転記
 最後に回答文字列を出力してACでした。

 https://atcoder.jp/contests/abc315/submissions/44711250

2.B - The Middle Day
 そこまで難しい問題ではなかったのに、はまってしまいました・・・。
 【考え方】
  1)月ごとの日数リストを集計して1足したものを2で割って中間日Mを求める。
  2)回答用変数ans1(何か月目かを保存初期値1)、ans2(何日目かを保存初期値0)
   を準備
  3)月ごとの日数リストを順に読んでいきMと比較
   -Mより小さかったらans1に1を加算し、Mからその月の日数を減算
   -M以上だったらans2にMの値をセット
  4)ans1とans2を出力
  
  考え方は間違っていませんでしたが、3のループで、M以上だった時に
  ブレイクを入れ忘れ、WAが出てしまってました。
  
  何回かの試行錯誤ののち、間違いに気づき修正してACとなりました。

 https://atcoder.jp/contests/abc315/submissions/44748988

3.C - Flavors
 こちらも、解法はすぐ浮かんだのですが、記述ミスに気付かず時間を
 取ってしまいました。

 【考え方】
  ・満足度最高となるパターンは、以下の2つ
   パターン1)フレーバーが同じであるハンデをものともせずその圧倒的な美味しさで
    満足度最高となる。
   パターン2)異なるフレーバーのハーモニーで順当に満足度最高となる。
  ・そこで美味しさが大きい順にアイス情報を並び替えて
   パターン1)同じフレーバで美味しさの合算値が最大となるパターン
   パターン2)異なるフレーバで美味しさの合算値が最大となるパターン
   の満足度をそれぞれ求め、大きい方を表示するという考えでロジック構築
 【実装】
  1)Nを読みこむ
  2)FとSをN回読み込み、リストLに、[S,F]の2次元リストとして登録
  3)リストLを降順ソート
  4)パターン1の組み合わせ用変数[美味しさ,フレーバのリストですべて初期値0,0]
   ans11・ans12とパターン2の組み合わせ用変数ans21・ans22を用意
  5)リストLを頭から変数x(内部は[S,F]のリスト)読み込む
   5-1)ans11が[0,0]の時
    -ans11とans21にxを転記
   5-2)5-1に該当しない、かつans12が[0,0]かつx[1]がans11[1]と同じ時
     (パターン1の2つ目のアイス)
    -ans12にxを転記
   5-3)5-1・2に該当しない、かつ、ans22が[0,0]かつx[1]がans11[1]と異なる時
     (パターン2の2つ目のアイス)
    -ans22にxを転記
   5-4)5-1・2・3に該当しない、かつ、ans12・ans22がともに[0,0]以外の時
     (パターン1・2の2つ目のアイスが定まっている)
    -ループ終了
  6)ans1=ans11[0]+(ans12[0]//2)、ans2=ans21[0]+ans22[0]をそれぞれ算出
  7)ans1とans2の大きい方を出力して終了

  ごちゃごちゃしているせいで自分で変数名を記述ミスしていて
  最初の提出時にWAを食らってしまいました。
  その後見直してACとなりました。

 https://atcoder.jp/contests/abc315/submissions/44755887

4.D - Magical Cookies
 最初は単純に縦横それぞれの行列毎に省いたフラグを持つリストを作り
 省いたフラグが立っていない行・列のみチェックするようにしたのですが
 LTEとなりました。

 次に、省いていない行列をそれぞれリストに持ち、チェックするようにして
 高速化を図りましたが、大して変わりませんでした。

 結局、解説を参考に、行列毎のアルファベット種類毎の出現個数を
 保持し、行・列ごとにすべて同じアルファベット種類の場合に列を消しつつ
 行側の消した行のアルファベット種の数量をマイナスする実装で
 ギリギリACとなりました。(pypyだとACでCpythonだとTLEでした。)

 https://atcoder.jp/contests/abc315/submissions/44783132

以上

1
2
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
2