以下の内容はhttps://drken1215.hatenablog.com/entry/2024/07/14/202808より取得しました。


JOI 一次予選 2022 (第 1 回) C - 複雑な文字列 (7Q, 難易度 2)

JOI は教育的な問題が多いね。

問題概要

文字 A, B, C, D, E のいずれかからなる文字列  S が与えられる。

 S に 3 種類以上の文字列が登場するならば Yes、そうでないならば No を出力せよ。

解法

次のような 5 個の変数を用意しましょう! (変数名はなんでもよい)

  • exist_A S 中に A があるならば 1、ないならば 0
  • exist_B S 中に B があるならば 1、ないならば 0
  • exist_C S 中に C があるならば 1、ないならば 0
  • exist_D S 中に D があるならば 1、ないならば 0
  • exist_E S 中に E があるならば 1、ないならば 0

これら変数の値は、for 文で求められます。変数の初期値を 0 にしておいて、for 文で文字列  S の各文字を見ていき、該当する文字があれば 1 にすればよいでしょう。

これら変数の値を求めたあとは、5 個の変数値を合計することで、 S に登場する文字の種類数がわかります。

その値が 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;
}



以上の内容はhttps://drken1215.hatenablog.com/entry/2024/07/14/202808より取得しました。
このページはhttp://font.textar.tv/のウェブフォントを使用してます

不具合報告/要望等はこちらへお願いします。
モバイルやる夫Viewer Ver0.14