0.はじめに
最近調子を落としているうえに先週は旅行に行っていたため
少しお疲れ気味で参戦したABC401。
そういえば最近コードテストや提出後の判定に時間がかかることがあり
また攻撃受けているのかなと不安になりますね。
というのは、言い訳でもないですがCすら解けずに
あえなく終了。
レートも-42の734と大きく後退し茶色もしっかり根付いてきました。
1. A - Status Code
Sを読み込んで範囲比較して範囲内ならSuccess、外ならFailureを
出力して終了。
コードを書くよりFailureのつづりの方が難しかったです。
https://atcoder.jp/contests/abc401/submissions/64731834
2.B - Unauthorized
いろいろややこしい感じではありますが、
ログイン状態のフラグとエラー回数カウントの変数ansを持ち
loginしたらフラグを1に、logoutしたらフラグを0に
ログインしている状態でprivateしたらansに1加算
として、最後にansを出力して終了としました。
https://atcoder.jp/contests/abc401/submissions/64741275
3.C - K-bonacci
コンテスト中は、要素の値の対象となる範囲をデキューで管理したり
リストの値を辞書で管理したり、modintを使ったりと
いろいろ工夫してもダメでした。
解説を見たところ、考え方はあっていたようですが
普通にリストでの管理で行けると知り
時間がかかるポイントの洗い出しが出来ていないことを学びました。
https://atcoder.jp/contests/abc401/submissions/64797503
4.D - Logical Filling
コンテスト終了間近にCはだめだけどDならいけるのでは?
と、取り組みましたがWAとなりました。
場合分けの種類が足りなかったようで、Cを早々に諦めれば
ワンチャン行けたかなとも思いました。
解説を見ながら解き方を把握し復習しました。
【考え方】
1)先に.となることが確定している?を.に置き換えつつoの数を数え変数oにセット
→先頭から文字列を見ていき左隣か右隣りがoである?を.に変換
2)1)で数えたoの数がKと一致していたら1)で変換し後の文字列の
?を.に変換して出力して終了
3)残った?を出来るだけoにした場合、何個oにできるかを数えてqにセット
→文字列を先頭から見ていき、
フラグが立っておらずかつ?だったらqを1加算しフラグを立てる
フラグが立っていて?だったらフラグを倒す
フラグが立っていて?以外だったらフラグを倒す
→上記に合わせ、連続する?の先頭位置と、?の連続する個数を辞書に保持しておく
4)o+qがKより少ない場合?のoの位置はどこでも取りうるので
1)で変換した文字列のまま出力して終了
5)o+qがKと同じ場合、?の固まりの位置と?の数毎に以下変換をして出力して終了
→?の固まりの個数が偶数の時?はそのまま
→?の固まりの個数が奇数の時?を1ならo、3ならo.o以下.oを増やしてつなげた形に変換
場合分けを思った以上に細かくする必要がありました。
https://atcoder.jp/contests/abc401/submissions/64807820
以上