JOI は教育的な問題が多いね。
問題概要
文字 A, B, C, D, E のいずれかからなる文字列 が与えられる。
に 3 種類以上の文字列が登場するならば Yes、そうでないならば No を出力せよ。
解法
次のような 5 個の変数を用意しましょう! (変数名はなんでもよい)
exist_A←中に A があるならば 1、ないならば 0
exist_B←中に B があるならば 1、ないならば 0
exist_C←中に C があるならば 1、ないならば 0
exist_D←中に D があるならば 1、ないならば 0
exist_E←中に E があるならば 1、ないならば 0
これら変数の値は、for 文で求められます。変数の初期値を 0 にしておいて、for 文で文字列 の各文字を見ていき、該当する文字があれば 1 にすればよいでしょう。
これら変数の値を求めたあとは、5 個の変数値を合計することで、 に登場する文字の種類数がわかります。
その値が 3 以上であれば Yes を出力し、そうでないならば No を出力すればよいでしょう。
コード
#include <bits/stdc++.h> using namespace std; int main() { int N; string S; cin >> N >> S; int exist_A = 0, exist_B = 0, exist_C = 0, exist_D = 0, exist_E = 0; for (int i = 0; i < N; ++i) { if (S[i] == 'A') exist_A = 1; else if (S[i] == 'B') exist_B = 1; else if (S[i] == 'C') exist_C = 1; else if (S[i] == 'D') exist_D = 1; else exist_E = 1; } if (exist_A + exist_B + exist_C + exist_D + exist_E >= 3) cout << "Yes" << endl; else cout << "No" << endl; }