0.はじめに
今回のコンテストは問題のレベルがちぐはぐな気がしました。
Bが難しく、Cが簡単でD,EよりFが簡単な気がしました。
Fが簡単だったのは、Pythonの言語的特性のせいかもしれません。
サッカー見ながらやってたら、A正解でフィニッシュになりそうだったので
消して集中しました。
そんなこんなで、ABCF正解で1798thと近年まれに見る高順位。
レートも936と初の900台に届きました。
1.A - TLD
最後のドット以降の文字列を表示という問題。
答えを格納するリストansを用意しておいて
Sを先頭から見ていきながらansに1文字ずつ格納。
”.”がきたらansを空にする。
といったロジックで最後にansをjoinして出力。
いろいろやり方ありそうですが自分なりにすっきりした方法を取りました。
https://atcoder.jp/contests/abc339/submissions/49916205
2.B - Langton's Takahashi
大ブレーキを起こした問題。
Dでもよいのでは・・・という印象。
配点的には250点と高目でした。
方向転換や、端に行った場合の挙動等、類似問題の
ロジックを使いまわせばまぁ、スムーズに行けそうではあります。
私の嵌りポイントとしては、2次元表の添え字の前後とX軸とY軸を
表す値がどっちがどっちかわからなくなるところです。
今回もそこでてこずり、WAを繰り返しました・・・。
実装としては、問題文の内容を素直に実装しました。
後に回答を見ると、方向を表す表や、回答用の2次元表の端に行った処理を
modを取ることで対応可能と見てなるほどと思いました。
https://atcoder.jp/contests/abc339/submissions/49950751
3.C - Perfect Bus
問題を読んで、直感的に、以下の実装を思いつきました。
【考え方】
1.ansに0を格納。
2.Aを先頭から見ていき、ansにA[i]を加算していく
3.ansが0より小さくなったらansを0にリセット
4.最後にansを出力して終了。
乗客の変動の中で、一番乗客が少なくなったタイミングを
単純に0人とすればそのあとの変動が条件を満たさないことはないなと
考えた結果で、そのままAC頂けました。
https://atcoder.jp/contests/abc339/submissions/49938574
4.F - Product Equality
D・Eは、断念し、Fに向かいました。
最初、i=j=kとかが許されるのかが条件にないな‥と思いましたが
例題や、i≠j≠kが条件にないことからOKなんだなと分かりました。
とりあえず、1000×1000を単純に取りまわすのは無駄かなと思い
まずは以下を実装
【実装】
1)辞書DにKEYを値、値を個数として、リストAを詰め込む。
2)D.keys()をリストLに格納し、昇順にソート
3)2重for文で、Lからi・jを取り出す
4)i*jをkとし、D内にkがあるかを検索
5)あった場合は、D[i]*D[j]*D[k]を、変数ansに加算
6)最後にansを出力して終了
1000*1000位ならいけるかなーと思いましたが
桁数が大きいせいか、TLEが5個。
5個位なら、何とかなるかと思いとりあえず
Kが、Lの最大値を超えた時に、2重ループのjのループを、ブレイクするように
したところ、ACとなりました。
解説をみたら、難しいことが書いてあって理解できませんでしたが
c++とかだと難しいのかなーと思いました。
https://atcoder.jp/contests/abc339/submissions/49964000
以上