Yuulis.log

Yuulis.log

トンネルを抜けるとそこは参照エラーであった。

【AtCoder】ABC 404 A - Not Found | 緑コーダーが解くAtCoder

atcoder.jp

配点: 100 点 / 実行時間制限: 2 sec / メモリ制限: 1024 MB / Difficulty: 24 / NoviSteps: 6Q


ABC404 not found.


問題概要

英小文字からなる長さ  1 以上  25 以下の文字列  S が与えられるので、  S に含まれない英小文字を一つ出力せよ。但し、そのようなものが複数ある場合はどれを出力してもよい。

制約

問題文の通り。

考察

アルファベットのリストを構築する

予めアルファベット26文字のリスト  \mathrm{alphabet} とそれに対応するフラグ配列  \mathrm{flag} を用意しておく。

 Sの各文字についてフラグを立てていき、その後  i = 1, 2, \dots, 26 に対して  \mathrm{flag_{i}}falseであるものについて、  \mathrm{alphabet_{i}} を出力すればよい。

containsを使用する

std::basic_string::containsを使うことで、簡単にこの問題を解くことができる。

 S の各文字  c に対して、S.contains(c)falseであるものを出力すればよい。

cpprefjp.github.io

実装例

考察1

#include <bits/stdc++.h>
using namespace std;

#define rep(i, start, end) for (auto i = (start); (i) < (end); (i)++)

// ======================================== //

char alphabet[26] = {'a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i', 'j',
                     'k', 'l', 'm', 'n', 'o', 'p', 'q', 'r', 's', 't',
                     'u', 'v', 'w', 'x', 'y', 'z'};

int main()
{
    string S;
    cin >> S;

    vector<bool> flag(26, false);
    for (auto &&c : S)
    {
        flag[c - 'a'] = true;
    }

    rep(i, 0, 26)
    {
        if (!flag[i])
        {
            cout << alphabet[i] << endl;
            return 0;
        }
    }
}

atcoder.jp

考察2

#include <bits/stdc++.h>
using namespace std;

#define rep(i, start, end) for (auto i = (start); (i) < (end); (i)++)

// ======================================== //

int main()
{
    string S;
    cin >> S;

    rep(c, 'a', 'z' + 1)
    {
        if (!S.contains(c))
        {
            cout << c << endl;
            return 0;
        }
    }
}

atcoder.jp

実装時間: 5分

コメント

char型に対してfor文を使えることを完全に忘れていた。