Kazun の競プロ記録

競技プログラミングに関する様々な話題を執筆します.

AtCoder Beginner Contest 237 C 問題 kasaka

問題

atcoder.jp

提出解答

atcoder.jp

問題の概要

文字列  S が与えられる. この  S の先頭に  0 個以上の  {\tt a} を加えて, 回分にできるか?

制約

  •  1 \leq |S| \leq 10^6
  •  S は英小文字からなる文字列

解法

 S {\tt a} からなる文字列だった場合, 答えは明らかに Yes なので, 以降ではそうでないとする.

ここで, 文字列  T が回分であるとき,  T の先頭から連続する  {\tt a} の個数を  p_T, 末尾から連続する  {\tt a} の個数を  q_T とすると,  p_T=q_T が成り立つ.

よって,  p_S \gt q_S ならば明らかに否定的だし,  p_S \leq q_S ならば, 回分にするためには  q_S-p_S 個の  {\tt a} を先頭に加えるしかない. この文字列が回分かどうかを判定すればよい.