0.はじめに
久々に企業名を冠していないABCだなーと思いつつ参戦。
人気企業アンケートの為かな・・・。
A~Dはとりあえず解けましたが、そこで時間切れ。
結果として、レートは+1とほぼ変わらずだったので
他の方もそこそこ行けてたんだろうなと思いました。
対象言語も増えたようですが、Pythonが3種類くらいあって
しかも並んでないのでなんかよくわかりにくかったです。
せめてアルファベット順に並ばないのかな・・・。
1.A - 3.14
最初四捨五入するのかと思い悩みましたが、切り捨てだったので
単純に与えられた円周率をいい感じでカットして出力してACでした。
https://atcoder.jp/contests/abc314/submissions/44492973
2.B - Roulette
なかなか複雑な条件で、出力も
場合によって2種類必要と、手ごたえのある問題でした。
実装は、入力しながら
賭けた出目をキー、賭けた人達のリストを値に持つ辞書ACと
賭けた人毎のかけた出目の種類数をもつ辞書CNを作成
Xを入力したあと、XがACにない場合は0を出力して終了
存在した場合は、値のリストをリストHLに格納
HLのかけた人毎にACを検索し、各人の出目の種類数をリストHNに格納
HNの最小値=最小出目の種類数をMinHに格納。
再度HLリストを頭から見ていき、出目の種類数がMinHと同じである
賭けた人をリストansに格納
最後にansの長さと、各値を出力して終了
提出した際に、ansの長さを出力する必要があることを
見逃して、WAを出してしまったのが悔やまれます。
https://atcoder.jp/contests/abc314/submissions/44503150
3.C - Rotate Colored Subsequence
一目でTLEが心配される問題。
キーは色名、値は前回発生したキー色の文字辞書dictを用意
文字列SとリストCを頭からインデックスをiとして見ていき
文字列S2に移行していく
C[i]がdictにない場合
S2に""を追加
あった場合
S2にdict[C[i]]の値を追加
dict[C[i]]にS[i]を追加
ここまでで、色毎の先頭の文字は""、最後の文字は
dictに入っている
そこで、S2を頭からインデックスをiとして見ていき
文字列ansに移行していく
S2[i]が"_"の時、ansにdict[C[i]]の値を追加
それ以外の場合、S2[i]を追加
この実装で提出したところpypyだとTLEだったので
Cpythonで提出したところACとなりました。
D問題で、文字列をリストにする方法を知ったので
Sをリスト化して改良したところpypyでも楽にACとなりました。
https://atcoder.jp/contests/abc314/submissions/44514010
改良版
https://atcoder.jp/contests/abc314/submissions/44545235
4.D - LOWER
いかにTLEを回避するか問題だなと思いつつ、さすがに
文字列の儘は難しいので文字列をリスト化して保持しました。
(意外と扱いやすいので今後も使っていきます)
まずはクエリーをリストCに保存しつつ、t1=2と3が最後に出てくる
箇所を保存します。
次に、リストCを頭から読んでいき、t1が1の場合は、文字列リストx文字目を
cに置き換える
t1が2・3の場合は、それが、最後にで来る箇所と一致する場合のみ
文字列リスト内のアルファベットの大文字小文字変換を行う
最後に文字列リストを結合して出力して無事ACでした。
https://atcoder.jp/contests/abc314/submissions/44529944
以上