Yuulis.log

トンネルを抜けるとそこは参照エラーであった。

【AtCoder】ABC 344 A - Spoiler | 茶コーダーが解くAtCoder

atcoder.jp

実行時間制限: 2 sec / メモリ制限: 1024 MB / Difficulty: 20

問題概要

英小文字と2つの|のみからなる文字列  S が与えられる。  S から2つの|及びその間にある文字を除いたものを出力せよ。

制約

  •  S の長さは  2 以上  100 以下

考察

C++ にはある文字列の部分文字列を取得するsubstr関数があるが、添字ミスが怖いので、私は  S を先頭から一文字ずつ見ていく方法を取った。具体的には以下のようになる。

  1. あらかじめフラグをtrueにしておく。また、出力用に文字列変数ansを持っておく。
  2.  S i 文字目について、
    • S[i]|ならば、フラグの真偽値を反対にする。
    • それ以外のとき、フラグがtrueならば、ansS[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;
}

atcoder.jp

実装時間: 5分以内