Yuulis.log

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

【AtCoder】ABC 345 A - Leftrightarrow | 茶コーダーが解くAtCoder

atcoder.jp

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

問題概要

<, =, >からなる文字列  S が与えられる。  S が次の条件を満たす双方向矢印型の文字列であるかを判定せよ。

双方向矢印型文字列の条件 : 1個の<、1個以上の=、1個の>をこの順に連結した文字列である。

制約

  •  S<, =, >のみからなる長さ  3 以上  100 以下の文字列

考察

条件を全て満たすかどうかを判定する場合は、なるべく強い条件 (位置などが固定されているもの) から判定していくと処理しやすい。この場合は、「 S の先頭は<で、末尾は>であるか?」という点から判定していく。これを満たさない文字列は即座にNoとしてプログラムを終了する。

上の条件を満たしている文字列に対しては、  S の長さを  l として、「 S の2文字目から  l - 1 文字目が全て=であるか?」をfor文で判定してやればよい。

コード

#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;

    if (S[0] != '<')
    {
        cout << "No" << endl;
        return 0;
    }
    else if (S[S.size() - 1] != '>')
    {
        cout << "No" << endl;
        return 0;
    }

    rep(i, 1, S.size() - 1)
    {
        if (S[i] != '=')
        {
            cout << "No" << endl;
            return 0;
        }
    }

    cout << "Yes" << endl;
}

atcoder.jp

実装時間: 5分