実行時間制限: 2 sec / メモリ制限: 1024 MB / Difficulty: 20
問題概要
英小文字と2つの|
のみからなる文字列 が与えられる。 から2つの|
及びその間にある文字を除いたものを出力せよ。
制約
- の長さは 以上 以下
考察
C++ にはある文字列の部分文字列を取得するsubstr
関数があるが、添字ミスが怖いので、私は を先頭から一文字ずつ見ていく方法を取った。具体的には以下のようになる。
- あらかじめフラグを
true
にしておく。また、出力用に文字列変数ans
を持っておく。 - の 文字目について、
S[i]
が|
ならば、フラグの真偽値を反対にする。- それ以外のとき、フラグが
true
ならば、ans
にS[i]
を追加する。フラグがfalse
ならば、無視して次に進む。
コード
#include <bits/stdc++.h> using namespace std; #define rep(i, start, end) for (ll i = (start); i < (ll)(end); i++) // ======================================== // int main() { string S; cin >> S; bool flag = true; string ans = ""; rep(i, 0, S.size()) { if (S[i] == '|') flag = !flag; else if (flag) ans += S[i]; } cout << ans << endl; }
実装時間: 5分以内