0.はじめに
8月も終わると言うのに暑すぎる今日この頃。
今回は(も?)C問題で大苦戦。
なんとかACとなった時点ですでに残り20分でD、Eとも
出来る気がしませんでした。
レートは-13の681と、600台も板についてきました。
D、Eもその後復習しましたが、解説見ないで解ける自信はあまりありません。
1. A - Misdelivery
A問題も難易度上がってきたなと思う問題。
iをカウントアップしながらSを読み込んで
部屋番(i)をキーに、Sを値にして辞書Dに登録。
XとYの組み合わせが辞書通りならYes、違えば
Noを出力して終了としてACでした。
https://atcoder.jp/contests/abc421/submissions/68900180
2.B - Fibonacci Reversed
フィボナッチ関数の一般化(?)問題。
といってもまぁB問題の制限下なので普通に実装。
XとYを読み込んだらリストLに格納
iを2~9まで回して以下の処理
・lにL[i-2]+L[i-1]を文字列としたものを格納
・Lにlを逆にした後、int型に戻した値を追加
最後にL[9]を出力してACとなりました。
https://atcoder.jp/contests/abc421/submissions/68909275
3.C - Alternated
最初は考え方がさっぱりわからず途方にくれましたが
以下の考え方でいける!と解き始めました。
【考え方】
・先頭の文字をPとする
・入れ替えの必要がある文字数をCとする(初期値0)
・入れ替え回数をansとする(初期値0)
・2文字目以降を参照し、Pと同じ場合はCに1を足す
・2文字目以降にPと違う文字が来た時
→Cが1以上の時はansにCを足し、Cから1を引く
(入れ替え後の最後の文字は変わらずPのままなのでPはそのまま)
→Cが0の時は最後の文字が、Pと変わるのでPを最後の文字で置き換え
上記考え方で例題はクリアできたので提出したところ、WAが3つ発生
BAABABのようなケースで1回で済むところを2回としてしまう問題が分かりました。
そこで、先頭の文字を元の文字と違う文字とするパターンも加えて
実装したところ、WAが1つに。
試行錯誤の上、元の文字列を逆にしたものを上記考え方+先頭の文字を元の文字と違う文字とするパターンで
処理したところ、なんとかACとなりました。
大変不格好で無駄も多そうでしたがコンテスト時は良しとしました。
https://atcoder.jp/contests/abc421/submissions/68936690
コンテスト後解説を読み、本文を書いているうちに以下のように
0文字目を”A”、”B”とする形で考え方を実装(2文字目以降を参照を1文字目以降に変更)すれば
綺麗にACとなることが分かりました。
https://atcoder.jp/contests/abc421/submissions/68958155
4.D - RLE Moving
コンテストでぱっとみで、解き方が不明であきらめてしまいました。
その後解説を見て、両名の方向転換の間毎の判定をすればよいと分かり
それならいけそうと取り組みました。
その後解説を読みながらでもめちゃくちゃ苦労しつつ
何とかACとなりました。
https://atcoder.jp/contests/abc421/submissions/68956901
以上