3 重の for 文を書くのが楽だと思う
問題概要
3 種類の文字 .
、|
、*
からなる、長さ の文字列 が与えられる。 には |
がちょうど 2 つ、*
がちょうど 1 つ含まれる。
*
が 2 つの |
に挟まれているかどうかを判定せよ。
考えたこと
色々な解法がある。一番楽なのは次のように解釈することだと思う。
文字列 の 番目の 3 個の文字であって、
S[i]
=|
S[j]
=*
S[k]
=|
であるような組が存在するかどうかを判定せよ。
このように解釈すると 3 重 for 文で解ける。
コード
#include <bits/stdc++.h> using namespace std; int main() { int N; string S; cin >> N >> S; bool res = false; for (int i = 0; i < N; ++i) { for (int j = i+1; j < N; ++j) { for (int k = j+1; k < N; ++k) { if (S[i] == '|' && S[j] == '*' && S[k] == '|') res = true; } } } if (res) cout << "in" << endl; else cout << "out" << endl; }