【AtCoder】ABC 466 B - Representative Balls

B - Representative Ballsatcoder.jp favicon

実行時間制限: 2 sec / メモリ制限: 1024 MiB / Difficulty: 37 / NoviSteps: 6Q / 配点: 200 点

問題概要

NN 個のボールがあり、 ii 番目のボールの色は CiC_i 、大きさは SiS_i である。

k=1,2,,Mk = 1, 2, \ldots, M について、色 kk のボールの大きさの最大値を出力せよ。 ただし、色 kk のボールが存在しない場合は-1とすること。

制約

  • 1N,M1001 \leq N, M \leq 100
  • 1CiM1 \leq C_i \leq M
  • 1Si1001 \leq S_i \leq 100
  • 入力される値はすべて整数

考察

ボールの色ごとにsetを用意して、その大きさを格納していく。

その後、各 kk について、対応するsetの末尾の値(最大値)を出力すればよい。

setの長さが 00 の場合は、-1を出力するのを忘れない。

実装例

CPP
1.#include <bits/stdc++.h>
2.using namespace std;
3.
4.#define rep(i, start, end) for (auto i = (start); (i) < (end); (i)++)
5.
6.// ======================================== //
7.
8.int main()
9.{
10. int N, M;
11. cin >> N >> M;
12. vector<set<int>> colors(M);
13. rep(i, 0, N) {
14. int C, S;
15. cin >> C >> S;
16. colors[C - 1].insert(S);
17. }
18.
19. rep(k, 0, M) {
20. if (colors[k].size() == 0) {
21. cout << -1 << endl;
22. }
23. else {
24. cout << *colors[k].rbegin() << endl;
25. }
26. }
27.
28. return 0;
29.}
atcoder.jp favicon

実装時間: 5 分以内

コメント

setを使わなくても、色ごとにボールの大きさの最大値のみを1次元配列で管理するのでも良さそう。