Codeforces Round #617 (Div. 3) バチャ
URL:https://codeforces.com/contest/1296
ABCDの4完!4ペナ出してるのが痛すぎるけど、順位表を見る限り他の人も結構ペナを出していた……。
A. Array with Odd Sum
数列から適当に番目と番目の数字を選んでをに置き換える、という操作を好きな回数できる。適切に操作することで数列の和を奇数にすることが可能か?という問題。
なんか問題文難しくない?操作についてと何を求めるのかを誤読して1ペナ。奇数の個数が奇数か、奇数が1個以上かつ偶数が1個以上ある場合YES、そうでなければNO。
B. Food Buying
円分の物を購入すると円のキャッシュバックがもらえる。適切に物を買ったとき、払える金額の合計の最大値はいくらか、という問題。
を+%に置き換えてシミュレートしていく。このときだけ別に足し合わせておいて、あとから元のの値と足せば答えが出る。
C. Yet Another Walking Robot
最初にロボットがいて、L,R,U,Dからなる文字列で上下左右の動きを命令されている。この文字列の部分文字列のうち、切り取っても切り取り前とロボットの座標が変わらない部分のうち最も短いものを切り取るという問題。
zero sum rangesと同じ考え方で、既に出てきた座標に移動した場合、それは切り取っても問題ない動きということになる。一番短いやつを切り取らなきゃいけないので、mapで座標が出てきたときの文字列の最新の位置を保持していく。
D. Fight with Monsters
自分が攻撃→ライバルが攻撃を繰り返して、1匹ずつモンスターを倒していく。自分の攻撃力・ライバルの攻撃力・ライバルの攻撃の順番を飛ばすことができる魔法の回数・モンスターたちの体力が与えられるので、自分の手番で最大何匹のモンスターが倒せるかを求める。
まず与えられるモンスターの体力は全部で余りを取る。もし余りが0の場合はとして、ソートする。自分の手番で一撃で倒せる範囲の体力(~)は0回の魔法で倒せる。残り体力が以上のモンスターについては、体力が少ない順に何回魔法を使えば倒せるかを求める。
体力のモンスターを倒すには切り上げの関係で回攻撃する必要がある。順番として、魔法0回でダメージ与えることができて、以降は魔法1回ごとに追加でダメージを与えられるから、魔法を使う回数を求めるときは分子からを引く。
E1以降は余裕ができたらでいいやの気持ち(そんな日は来ない)
おやすみ~~~~