AtCoder

ABC064 C問題(Colorful Leaderboard)を解く

AtCoder_ABC064_C

AtCoder が提供しているABC(AtCoder Beginner Contest)064 C問題をC++で解いてみました。ABC064は、2017年6月10日21:00に実施されました。

AtCoder の紹介はこちらに、プログラミングの方針はこちらに記事があります。

C問題 Colorful Leaderboard(Difficulty : 559)

問題の詳細は、リンク先をご覧ください。

ABC064 C問題 Colorful Leaderboard

気付きにくいコーナーケースがあります。AtCoder Problems による Difficulty は 559 でした。

解答案

C++ プログラム例(ABC064C)

レートが3200未満の場合、レートの色は決まります。3200以上の場合は、好きな色に変更することができるため、最小値は3200未満の実際にその人がいたレート帯の個数、最大値は、最小値+3200以上の人数だと思われます。

この場合、全員が3200以上となる場合に不正解となります。これは最小値が0になってしまうためです。このため、28行目で最小値を1にするコードを追加しました。

以下が、C++プログラムです。

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

int main()
{
	int n;
	cin >> n;
	vector<int> rate(8, 0);
	int over3200 = 0;
	for (int i = 0; i < n; ++i) {
		int a;
		cin >> a;

		if (a < 3200) {
			++rate[a / 400];
		} else {
			++over3200;
		}
	}

	int result = 0;
	for (int i = 0; i < rate.size(); ++i) {
		if (rate[i] > 0) {
			++result;
		}
	}

	cout << max(1, result) << " " << result + over3200 << endl;

	return 0;
}

AC(Accepted=正しいプログラム)と判定されました。

最後に

このような問題もミスなく一発で解きたいものです。

引き続き ABC の問題を紹介していきます。

COMMENT

メールアドレスが公開されることはありません。 が付いている欄は必須項目です

CAPTCHA