【AtCoder】ABC 462 B - Gift

B - Giftatcoder.jp favicon

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

問題概要

NN 人がギフトを送り合っており、人 ii は人 Ai,1,Ai,2,,Ai,KiA_{i,1},A_{i,2},\ldots,A_{i,K_i}KiK_i 人にギフトを送った。

i=1,2,,Ni=1,2,\ldots,N に対し、人 ii にギフトを送った人を全て求めよ。

制約

  • 2N1002\le N\le 100
  • 1KiN11\le K_i\le N-1
  • 1Ai,1<Ai,2<<Ai,KiN1\le A_{i,1} < A_{i,2} < \cdots < A_{i,K_i}\le N
  • Ai,jiA_{i,j} \neq i
  • 入力される値は全て整数

考察

BijB_{ij} を「人 ii が人 jj からギフトを受け取った」ことを表す二次元配列とすると、 1iN,1jKi1 \leq i \leq N, \, 1 \leq j \leq K_i に対して, 1次元配列 BAi,jB_{A_{i,j}}ii を追加していけばよい。

実装時はインデックスの扱いに注意すること。

実装例

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;
11. cin >> N;
12.
13. vector<vector<int>> ans(N);
14. rep(i, 0, N) {
15. int K;
16. cin >> K;
17. rep(j, 0, K) {
18. int A;
19. cin >> A;
20. ans[A - 1].push_back(i + 1);
21. }
22. }
23.
24. rep(i, 0, N) {
25. cout << ans[i].size();
26. for (auto a : ans[i])
27. cout << " " << a;
28. cout << endl;
29. }
30.
31. return 0;
32.}
atcoder.jp favicon

実装時間: 5 分以内

コメント

安心できるB問題。