アットウィキロゴ
競技プログラミング用 知識集積所
掲示板 掲示板 ページ検索 ページ検索 メニュー メニュー

競技プログラミング用 知識集積所

ABC453A - Trimo

最終更新:

sport_programming

- view
管理者のみ編集可


問題


必要知識


考え方

まずは入力内容を確認。
入力内容は整数と文字列が1つずつなので、int型string型の変数を用意してcinで入力を受け取る。

先頭の'o'を無視したいというのを、「これまでに'o'以外の文字が一度でも出ていたら、その文字を出力する」と考える。
すると、「これまでに'o'以外の文字が一度でも出ているか」をbool型変数に保管しておけばよさそう。

ということで、以下で解ける。
まず、以下の2つを用意する。
  • 「これまでに'o'以外の文字が一度でも出ているか」を表すbool型変数を用意し、falseで初期化
  • 'o'を消した文字列を作るためのstring型変数を用意し、空文字列で初期化
そして、文字列を前から1文字ずつ見ていくforループを用意する。
そのループの中で以下の2つのことを実行する。
  • その文字が'o'以外の文字だったら、bool型変数をtrueに書き換える
  • bool型変数がtrueになっていたら、その文字を目的文字列を作るためのstring型変数に+で付け足す。

最後に、できた文字列を忘れずにcoutすればおしまい。

解答例


注意点


別解

Sを直接処理する

vectorstring型は、先頭を削除するのは苦手だが、末尾を削除するのは得意である。
そこで、「reverse()関数※で全部を逆順にする→whileループで末尾に'o'がある限り末尾を削除→また全部を逆順にする」とすると、先頭から'o'を消せる。
文字列が全部'o'の場合に「末尾の文字」が存在しなくなるので、文字列の長さが正であるか毎回確認する必要があることに注意。
解答例
最近更新されたスレッド
ウィキ募集バナー