🐷

ABC374ABを理解し、取り出し可能にする

に公開

記事の概要

ABC374に参加しましたが、AとBのスピードが遅かったため、改善策を記載します。
Cに関しては大方解説通りに解けたので割愛します。

対象読者

Atcoder灰色の方

ABC 374

https://atcoder.jp/contests/abc374/tasks/abc374_a

A

問題概要

文字列の末尾が"san"であるかを判定する。

コンテスト中の方針

後ろからループを回して最後の文字のindex-1がn、最後の文字のindex-2がa、最後の文字のindex-3がsであるかを判定

提出コード

4分かかりました。もっと短縮できる。
https://atcoder.jp/contests/abc374/submissions/58436520

どうすれば時間短縮できたか?

substrで末尾3文字を取得し、判定を行えばコード量を大幅に短縮できる。

B

https://atcoder.jp/contests/abc374/tasks/abc374_b

問題概要

S,Tを比較して同じ文字列なら0、異なる場合は異なった場所の位置を出力。途中まで同じ文字列でサイズが異なった場合は、小さい方の文字列の位置+1を出力

コンテスト中の方針

問題概要とそのままコードに落とし込みました。

提出コード

約15分かかりました。
https://atcoder.jp/contests/abc374/tasks/abc374_b

どうすれば時間短縮できたか?

番兵方を使い、SとTの末尾にありえない文字列($とする)を1文字だけ追加する。
これによって、提出コードのような異なる文字になった場合に配列外参照対応のためにロジックを切り分ける必要がなくなる。
全て同じなら0を出力すればよい。

Discussion