0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

0.はじめに

 正月気分もすっかり抜けた今日この頃。
 今回はABはすぐにできましたが、C問題から難問。
 WAを繰り返しながらも何とか回答し、Dに取り組みましたが
 あえなく時間切れ。
 
 3問正解だったのでちょっとだけレートは上がり、+2の750と微増でした。

1. A - Octave

 小手調べ的な問題。
 ローカルテスト時に最初Yを2乗して出力して間違ってしまいましたが
 修正して無事ACとなりました。

 https://atcoder.jp/contests/abc440/submissions/72342347

2.B - Trifecta

 順位を調べる問題。
 リストTを元にリストの値と位置をタプルにしたリストを作り
 ソートして先頭から3つを表示とし、ACとなりました。

 https://atcoder.jp/contests/abc440/submissions/72346248

3.C - Striped Horse

 C問題にしては難しい気がしましたが、なんとか解けたからそれほどでも
 なかったのかな・・・といった問題。

 どうにも問題文がすんなり入ってこなかったので
 テストケースを元にあれこれ考えなんとか理解しました。

 【考え方】
  ・目的はマスをWマス毎に白と黒にしていくこと
  ・正整数Xにより、白マス黒マスの起点が変わる
  ・塗る範囲=求めるコストの範囲はWマス毎
  ・i%2Wが同じなら色は同じ
  ・各マスのコストを先頭から2W個のリストに集計する
   (マスiのコストはリストのi%2W番目に集計)
  ・上記集計リストの連続するWマスの値の合計が
   最も少ない=コストが少なくマスが塗れることとなる
  ・ただし、リストの末尾と先頭を含むWマスのケースもある

 【実装】
  1.最大値INF(float('inf'))を定義
  2.Tを入力
  3.以下T回繰り返し
   -1.N,W,リストCを入力
   -2.W2にW×2をセット
   -3.NがW2で割り切れる場合MにNを
    割り切れない場合はMにNからNをW2で割った余りを引きW2を足した値をセット
    (MはN以上最小のW2の倍数)
   -4.先頭からW2個毎の列のコストをセットするリストLを0で定義
   -5.Xを0からM+1まで増加させるループ
    -1.XがNより小さい時、L[X%W2]にC[X]を加算
      (XがCの範囲を超えるた場合は0が加算されるイメージ)
   -6.変数ansにINFをセット
   -7.blk(W個の連続するマスのコスト値)に0をセット
   -8.iを0からW2+Wを増加させるループ(+Wは末尾から先頭へ黒マス範囲が掛かっているケースのため)
    -1.iがWより小さい時blkにL[i%W2]を加算
    -2.iがW以上の時
     -1.ansにansとblkの小さい方をセット(i-1の時点のWマスのコストの判断)
     -2.blkからL[i-W]をマイナス
     -3.blkにL[i%W2]を加算
  4.ansにansとblkの小さい方をセット(ループ最終値の判断)
  5.ansを出力して終了

なかなかややこしかったですが、時間内に解けてほっとしました。

 https://atcoder.jp/contests/abc440/submissions/72370349

以上

0
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
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?