0.はじめに
土日はほぼ寝ている今日この頃。
今回もA~Cは順調でしたが、それ以降振るわず
3完で終了。
それでもCまでが早かったのかレートは
+7の786と微増しました。
1. A - Supermajority
AがBの2/3倍以上かを判定する問題。
先週の事もあるので、割り算は使わず
A×3がB×2より大きいかで判断する形でAC。
https://atcoder.jp/contests/abc465/submissions/77162201
2.B - Parking 2
駐車場の問題?
時刻(i)を1~24まで遷移させ
i-1時~i時の料金を算出しつつ
A時~B時だったら料金を加算する形で処理を作成しACでした。
【実装】
1.X,Y,L,R,A,Bを入力
2.回答用変数ansを0で初期化
3.i-1時~i時の料金をセットする変数PにYをセット
(0時から1時はL~Rの範囲に入らない為(A~Bにも入らないから関係ないが))
4.iを1から24まで1ずつ増加しつつ繰り返し
-1.L<i<=Rの時(特殊料金の範囲)PにXをそれ以外はPにYをセット
-2.A<i<=Bの時(駐車時刻の範囲の時)ansにPを加算
5.ansを出力
https://atcoder.jp/contests/abc465/submissions/77175735
3.C - Reverse Permutation
1~Nまでの数列を範囲を拡張しながらひっくり返したり
ひっくり返さなかったりする問題。
【考え方】
・文字列を後ろから見ていき、xなら数列の位置も変わらず
oならその文字は先頭に配置される。
例)----oなら5----
----xなら----5
・次の文字がoならその文字は末尾に配置されxなら3の後ろに配置される
例)---ooなら5---4
---xoなら54---
・上記考え方にそって実装を組み立てると
前からの文字列と後ろからの文字列を用意し
oがくるたびに文字を配置する文字列を
前後で変更していく形となる
【実装】
1.N、Sを入力
2.先頭からセットするリストMSと末尾からセットするリストSSを準備
※MSとSSのネーミングが逆になってしまいましたが提出もそうなのでそのままです・・・
3.変数SW(次の文字列がxの時MSにつける場合は1、SSにつける場合は0)に0をセット
3.iをN-1から0まで1ずつ減算しながら処理を繰り返す(文字列を後ろから見ていく)
4.S[i]がoの時、かつiが0以外の時(数列を続けるリストを切り替える)
-1.SWが1なら0に、SWが0なら1に変更
-2.SWが1の時MSにi+1を追加、0の時SSにi+1に追加
5.回答用文字列ansにMS+SS[::-1]をセット
6.ansを出力
https://atcoder.jp/contests/abc465/submissions/77188555
4.D - X to Y
今一解き方が思いつかないながらも、操作により取りうる値を
キューに入れ、回答が条件に当てはまるまで繰り返す方式で提出。
もちろんTLEとなり、どうにもできないままコンテスト終了となりました。
コンテスト後解説を見ると、操作としてはXとYの大きい方を
同じになるまでKで割っていくだけという単純な解法。
最初の解法でも余りの分の扱いのため、複雑になっていたので
割るだけの操作に集約する形は分かりやすいと思いました。
ただ、素の状態からこの解法までたどり着ける自身はありません・・・。
https://atcoder.jp/contests/abc465/submissions/77212539
以上