
配点: 100 点 / 実行時間制限: 2 sec / メモリ制限: 1024 MB / Difficulty: 24 / NoviSteps: 6Q
ABC404 not found.
問題概要
英小文字からなる長さ 以上
以下の文字列
が与えられるので、
に含まれない英小文字を一つ出力せよ。但し、そのようなものが複数ある場合はどれを出力してもよい。
制約
問題文の通り。
考察
アルファベットのリストを構築する
予めアルファベット26文字のリスト とそれに対応するフラグ配列
を用意しておく。
の各文字についてフラグを立てていき、その後
に対して
が
false
であるものについて、 を出力すればよい。
contains
を使用する
std::basic_string::contains
を使うことで、簡単にこの問題を解くことができる。
の各文字
に対して、
S.contains(c)
がfalse
であるものを出力すればよい。
実装例
考察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; } } }
考察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; } } }
実装時間: 5分
コメント
char
型に対してfor
文を使えることを完全に忘れていた。