ABC218 A - Weather Forecast / B - qwerty C++解答例
AtCoder Beginner Contest 218のA問題とB問題をC++で解きます。
A - Weather Forecast
問題文をAtCoderのページより引用します。
問題文
明日からの
日間の天気予報を表す文字列 7 が与えられます。 S
日後の予報は i の S 文字目が i o
であるとき晴れx
であるとき雨です。
日後の天気予報が晴れかどうかを教えてください。 N
制約
は1以上7以下の整数 N は長さ7の文字列であり、 S o
とx
のみからなる
解答例
与えられた文字列o
かx
かを判定します。
文字列std::string
型変数に受け取ることで、S.at(i - 1)
という文でアクセスできます。
インデックスの指定がi - 1
になっているのはstd::string
が0-indexedだからです。S.at(0)
に格納されています。
#include <iostream>
#include <string>
int main() {
int64_t N;
std::string S;
std::cin >> N >> S;
if (S.at(N - 1) == 'o') {
std::cout << "Yes" << std::endl;
} else {
std::cout << "No" << std::endl;
}
return 0;
}
実際に提出したコードはこちら。
B - qwerty
問題文をAtCoderのページより引用します。
問題文
1以上26以下の整数からなる長さ26の数列
が与えられます。ここで、 P = (P_1, P_2, \ldots, P_{26}) の要素は相異なることが保証されます。 P
以下の条件を満たす長さ26の文字列を出力してください。 S
- 任意の
について、 i (1 \leq i \leq 26) の S 文字目は辞書順で小さい方から i 番目の英小文字である。 P_i
制約
1 \leq P_i \leq 26 P_i \neq P_j (i \neq j) - 入力はすべて整数である。
解答例
「辞書順で小さい方から
例えばaから数えて2番目の英小文字はbです。
従って、与えられた数列
任意のchar
型変数を使って直接求める方法の2通りがあります。
本記事では後者の方法を採用します。'a' + (P.at(i) - 1)
という演算をすることで当該小文字のchar
型変数が求まります。ここでも0-indexedなので注意が必要です。
以下のコードでは解答用の文字列
#include <iostream>
#include <vector>
#include <string>
int main() {
std::vector<int64_t> P(26);
for (auto& p : P) {
std::cin >> p;
}
std::vector<char> S(26);
for (int64_t i = 0; i < 26; i++) {
S.at(i) = 'a' + (P.at(i) - 1);
}
for (auto c : S) {
std::cout << c;
}
std::cout << std::endl;
return 0;
}
実際に提出したコードはこちら。
Discussion