0.はじめに
A~Cは順調でしたが、Dは解き方が分からず飛ばし
EにとりかかるもTLEが解消できず
結局Cまで止まりでした。
レートは+19と微増でした。
1.A - Same
いろいろ方法は考えられましたが、単純にフラグを用意し
リストの2つ目から、1個前と同じかをチェックしていき
違ったらフラグを立て、最後にフラグが立ってたらNo
立ってなかったらYesを出力して終了。
https://atcoder.jp/contests/abc324/submissions/46524744
2.B - 3-smooth Numbers
Nを割り切れるまで、2で割り、割り切れなくなったら
割り切れるまで3で割る。
最後に残ったのが1ならYes、それ以外ならNoを出力して終了。
https://atcoder.jp/contests/abc324/submissions/46530063
3.C - Error Correction
めんどくさいだけで、考え方は簡単でした。
Tを読み込み、S毎に以下の判断
1)SとTが同じ
同じ場合 回答列に追加
違う場合 ↓
2)SとTの長さが同じ
同じ場合 SとTの各文字を比較し、差が1つなら回答列に追加
違う場合 ↓
3)SがTに1文字加えた文字列かチェック(関数)
加えた文字列の場合 回答列に追加
違う場合 ↓
4)TがSに1文字加えた文字列かチェック
加えた文字列の場合 回答列に追加(関数)
関数)S1がS2に1文字加えた文字列かチェック
1)S1とS2の長さを比較し、S1が一文字だけ長い状態でなかったらFalseを返す
2)S1とS2を先頭から一文字ずつ見ていき違う文字があったら
S1だけ一文字後を見ていく。再度違う文字があったらFalse
以降違う文字が無ければTrueを返す。
最後に、回答列の長さと
回答列を出力して終了
https://atcoder.jp/contests/abc324/submissions/46549253
4.D - Square Permutation
最初取り掛かった際は、平方数全列挙するのは
時間内に行けると分かりましたが、文字列の組み換えを
うまくいく方法が思いつかず断念しました。
コンテスト後、解説を見ると、最初に文字列側を
ソートした状態として固定し、平方数側を文字列にして
ソートするとよいことが分かり、そのように実装したら
ACとなりました。
この発想の転換はなかなか出てこないなと感心しました。
https://atcoder.jp/contests/abc324/submissions/46591411
5.E - Joint Two Strings
Dを飛ばして取り掛かったものの、TLE3つが解消できず
時間切れとなりました。
翌日解説やほかの方の解答をみて、だめな部分に気づきました。
後方一致数を調べる際に、Tを逆から見た文字列を用意していましたが
なぜか、比較するたびにT[::-1]の文字列を作っていました。
最初に一回Tの逆文字列を作ったところ、TLEが消えました。
ちょっとした差に見えましたがTが最長なケースを考えると
かなりのロスだったのだなと思いました。
【実装】
S_1~S_Nまでの文字列それぞれに対して
・Tとの前方から調べた一致数を調べ
一致数毎の文字列数の辞書を作成
辞書:bl(key:一致数、value:対象文字列数)
・Tとの後方から調べた一致数を調べ
一致数毎の文字列数の辞書を作成
辞書:al(key:一致数、value:対象文字列数)
・alのキーとblのキーを全組み合わせ見ていき
blキー+alキーの値がTの文字数以上であれば
回答変数ansに1を加える
・最後にansを出力して終了
https://atcoder.jp/contests/abc324/submissions/46597589
以上