実行時間制限: 2 sec / メモリ制限: 1024 MB / Difficulty: 41
問題概要
<
, =
, >
からなる文字列 が与えられる。 が次の条件を満たす双方向矢印型の文字列であるかを判定せよ。
双方向矢印型文字列の条件 : 1個の<
、1個以上の=
、1個の>
をこの順に連結した文字列である。
制約
- は
<
,=
,>
のみからなる長さ 以上 以下の文字列
考察
条件を全て満たすかどうかを判定する場合は、なるべく強い条件 (位置などが固定されているもの) から判定していくと処理しやすい。この場合は、「 の先頭は<
で、末尾は>
であるか?」という点から判定していく。これを満たさない文字列は即座にNo
としてプログラムを終了する。
上の条件を満たしている文字列に対しては、 の長さを として、「 の2文字目から 文字目が全て=
であるか?」を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; }
実装時間: 5分