0.はじめに
全体的に易しめの問題だった気がする337回でした。
とはいえ、A~Cは順調に解いたもののDでケアレスミスで大停滞。
3回もWAをだしてスコアを落としました。
とはいえ、なんとか、レートは±0で持ちこたえました。
Eは時間のない中強引にチャレンジしたものの玉砕。
その後解説を見ながらなんとか解けました。
Fは解説見ないでも行けそうと取り組みましたが
最初の印象より複雑で、解説を見ても解き方は
あってる気がしますが、実装力が追い付かない感じです・・・。
1.A - Scoreboard
因縁の高橋君対青木君シリーズ。
入力したXとYを集計し
最後に判定して結果を出力してAC。
https://atcoder.jp/contests/abc337/submissions/49436976
2.B - Extended ABC
B問題と高をくくってとりかかったところ、意外と実装が難しいことに気づきました。
結局、結構複雑な実装をする羽目になりました。
【実装】
前準備として、文字列を先頭から読み、文字と連続する文字数のタプルを
リストSLに格納する。(よく考えたら文字数は不要でした・・・)
例)AAABBBCCCCCCC
→SL=[("A",3),("B",3),("C",7)]
以下、SLの長さ毎に場合分け
len(SL)が4以上の時
拡張 ABC 文字列の条件下ではSLは最大3組までなので、Noを出力して終了
len(SL)が3の時
SL[0][0]="A"&SL[1][0]="B"&SL[2][0]="C"を満たせばYesを
満たさなければNoを出力して終了
len(SL)が2の時
SL[0][0]とSL[1][0]が、AB、AC、BCの組の場合Yesを
満たさなければNoを出力して終了
len(SL)が1の時
S内はABCしかないという条件下では、必ず拡張 ABC 文字列の条件を
満たすのでYesを出力して終了
力技でACを頂きました。
https://atcoder.jp/contests/abc337/submissions/49450281
3.C - Lining Up 2
問題文を読み解くのに手間取りましたが、実装自体は
それほど難しくない問題。
【実装】
・準備として、リストを読み、キーにA[i]、値にi(+1)を持つ
辞書Dを作成し、変数sに-1の位置(i+1)を保持する。
→Dはkeyの次に並んでいる人をValueにセットした辞書
・リストansにsをセット
・以下をN-1回実施
・sにD[s]をセット
・sをansに追加
・ansを出力して終了
https://atcoder.jp/contests/abc337/submissions/49458474
4.D - Cheating Gomoku Narabe
一目見てスキップしようと思いましたが、そのあとの問題も
大変そうだったのであきらめて挑戦。
斜めの判定が無いのが救いでした。
【考え方】
・各行列毎に以下のチェックを行う
・先頭から.とoの数を数えてそれぞれ変数cpとcoにセット
・cpとcoの合計がKと一致した場合
→cp個の.をoに変えればK個連続したoを作れる事になる
・ansにansとcpの小さい方をセット
・ただし、途中にxが出てきたら、cpとcoを0にクリア
・また、cpとcoの合計がKと一致した点から、K個前が
.だったらcpから、oだったらcoから1をマイナス。
(尺取法的に参照していく)
・最後にansを出力して終了
理屈は早めに分かったのですが、”cpとcoの合計がKと一致した点からK個前”の
計算が間違っていたのに気づかず無駄に3回ほど提出を繰り返してしまいました・・・。
https://atcoder.jp/contests/abc337/submissions/49499207
以上