Official
B - AtCoder Quiz Editorial by mechanicalpenciI
一番シンプルな方針としては候補の \(4\) つの文字列と 入力で与えられたかの \(4\) つのフラグを持っておき、 登場しなかった1つを出力すればよいです。 文字列の比較の仕方としては、例えばc++であれば、
- string型で持って文字列として比較
- char[] 型等の配列に収めて 1文字ずつ比較
等の方法がありますし、今回は \(2\) 文字目だけが異なり、
また、 ABC
, ARC
, AGC
, AHC
以外の入力は与えられない事から \(2\) 文字目だけを比較しても良いです。
よって for 文と if文を使って書く事が出来ます。
C++による実装例:
#include <bits/stdc++.h>
using namespace std;
int main(void) {
string cand[4] = { "ABC", "AGC", "AHC", "ARC" };
bool used[4] = {};
string str;
for (int i = 0; i < 3; i++) {
cin >> str;
for (int j = 0; j < 4; j++) {
if (cand[j] == str)used[j] = true;
}
}
for (int i = 0; i < 4; i++) {
if (!used[i])cout << cand[i] << endl;
}
return 0;
}
Pythonによる実装例:
cand=["ABC","ARC","AGC","AHC"]
used=[True for i in range(4) ]
for i in range(3):
str=input()
for j in range(4):
if(str==cand[j]):
used[j]=False
for i in range(4):
if(used[i]):
print(cand[i])
ちなみに、今回の \(2\) 文字目だけ異なる事を利用した少しだけトリッキーな書き方として以下のようなものもあります。 言語によっては使えない事もあるので注意してください。
C++による別解:
#include <bits/stdc++.h>
using namespace std;
int main(void) {
int k = 0 + 'B' + 'G' + 'H' + 'R';
string str;
for (int i = 0; i < 3; i++) {
cin >> str;
k -= str[1];
}
cout << "A" << (char)k << "C" << endl;
return 0;
}
posted:
last update: