AtCoder Beginner Contest 064 C - Colorful Leaderboard
問題
N人のAtCoderのレートが与えられます。レートごとに色を与えます。最小で何色、最大で何色必要かを求めます。
制約
考えたこと
レート3200以上は自由に色を選べるため、処理を分けます。
レート1~3199は400で割れば0~7になるため、8個の配列に記録すれば何色が使われたかわかります。
3200以上だけで与えられたときの場合分けができず、WAになってしまいました。
コード
#define _GIBCXX_DEBUG #include <bits/stdc++.h> using namespace std; #define rep(i, n) for (int i = 0; i < (n); ++i) #define all(v) v.begin(), v.end() using namespace std; using ll = long long; int main(void) { int N; cin >> N; vector<int> colors(8, 0); int over = 0; rep(i, N) { int num; cin >> num; if (num >= 3200) { ++over; } else { colors[num / 400]++; } } int sum = 0; rep(i, colors.size()) { if (colors[i]) ++sum; } int ans_min = max(1, sum); int ans_max = sum + over; cout << ans_min << " " << ans_max << endl; return 0; }
解説を読んで
場合分けをきちんとしなければいけませんでした。