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: