【AtCoder】ABC 442 C - Peer Review
https://atcoder.jp/contests/abc442/tasks/abc442_c
atcoder.jp
実行時間制限: 2 sec / メモリ制限: 1024 MiB / Difficulty: 174 / NoviSteps: 4Q / 配点: 300 点
問題概要
人の研究者がおり、 に対して研究者 と研究者 は互いに利害関係にある。 論文の査読者は、その論文の著者とは異なり、著者と利害関係にない相異なる 人の研究者でなければならない。
について以下の問題を解け。
- 研究者 が著者である論文の査読者の 人組として考えられるものは何通りあるか求めよ。ただし、すべての論文は単著であるものとする。
制約
- 入力される値はすべて整数
考察
研究者間の利害関係のグラフを考えたとき、研究者 自身とその隣接頂点を除いた人から 人を選ぶ組み合わせの数を求めればよい。
頂点 の次数を とすると、求める組み合わせの数は二項係数 である。
実装例
nCk関数は自作のものを使っている。
のときは計算できないので を出力すること。
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.using ll = long long;7. 8.ll nCk(ll n, ll r)9.{10. if (r < 0 || n < r)11. return 0;12. ll ans = 1;13. for (ll i = 1; i <= r; i++)14. {15. ans *= n--;16. ans /= i;17. }18. return ans;19.}20. 21.// ======================================== //22. 23.int main()24.{25. int N, M;26. cin >> N >> M;27. vector<int> degs(N, 0);28. rep(i, 0, M)29. {30. int A, B;31. cin >> A >> B;32. A--;33. B--;34. degs[A]++;35. degs[B]++;36. }37. 38. rep(i, 0, N)39. {40. ll x = N - 1 - degs[i];41. if (x < 3)42. cout << 0 << endl;43. else44. cout << nCk(x, 3) << endl;45. }46. 47. return 0;48.}https://atcoder.jp/contests/abc442/submissions/72682529
atcoder.jp
実装時間: 5 分
コメント
大真面目にグラフを書いて考えてしまったが、次数についてだけ考えればよかった。





