Official

C - 最速正解者/Fastest Answer Editorial by mechanicalpenciI


いくつか解く方法はありますが、比較的単純な方法の\(1\)つは以下のような方法です。

最初に最速正解者のIDをいれる配列 \(fa[i]\)\(0\) で初期化して用意しておきます。 そして、 \(2\) 行目から \(N+1\) 行目の問題番号 \(P_i\) と判定結果 \(V_i\) \((1\leq i\leq N)\) を順に見ていき、\(V_i\)AC かつ \(fa[P_i]\)\(0\) ならば、 \(fa[P_i]\)\(i\) を代入するという事を行えばよいです。

今回、すべての問題に AC が存在する事が保証されているので、最速正解者が存在したかなどの判定を行う必要はなく、最後に \(fa[i]\) を改行区切りで \(6\) 行出力すればよいです。

C++による実装例:

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


int main(void) {
	int n, k;
	int fa[6] = {};
	string prob, verd;

	cin >> n;
	for (int i = 0; i < n; i++) {
		cin >> prob >> verd;

		k = (int)(prob[0] - 'A');
		if ((fa[k] == 0) && (verd == "AC")) fa[k] = i + 1;
	}
	for (int i = 0; i < 6; i++) cout << fa[i] << endl;

	return 0;
}

posted:
last update: