公式

A - I'm a teapot 解説 by Nyaan


初心者の方へ

まず、\(S\) の長さが 3 未満である場合、答えはNo です。
そうでない場合、次の 3 個の条件が全て成立すれば答えは Yes、そうでなければ答えは No です。

  • \(S\)\(N-2\) 文字目が t である。
  • \(S\)\(N-1\) 文字目が e である。
  • \(S\)\(N\) 文字目が a である。

よって、これらを 1 個 1 個調べていけばよいです。
注意点として、\(S\) の長さが 3 未満である場合に \(N-2\) 文字目を調べようとすると言語および状況によっては配列外参照と呼ばれる実行時エラーが発生します。(やや不正確ですが簡単に言うと、添え字がマイナスになってしまい文字列の外側を調べようとしてエラーが起きます。) そのため、文字を調べる前に長さを確認して配列外参照が発生しないように実装しましょう。

なお、別解として、C++ の substr 関数や Python のスライス機能を用いて末尾 3 文字を取り出して判定する方法もあります。

  • 実装例(C++)
#include <iostream>
#include <string>
using namespace std;

int main() {
  int N;
  string S;
  cin >> N >> S;
  if (N < 3) {
    cout << "No\n";
  } else {
    if (S[N - 3] == 't' and S[N - 2] == 'e' and S[N - 1] == 'a') {
      cout << "Yes\n";
    } else {
      cout << "No\n";
    }
  }
}

投稿日時:
最終更新: