2
4

ABC324回答メモ

Last updated at Posted at 2023-10-15

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

以上

2
4
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
2
4