yukicoder:No.794 チーム戦
問題
https://yukicoder.me/problems/no/794
考え方
きれいな問題で好き。 はソートしても問題がないのでソートする。マッチングする際に が大きい値ほど候補になる相手が厳しく、候補が絞られるので が大きい値から考えていく。
サンプル1 の場合ソート後の数列で考えると以下のようになっていて
4 6 1 2 3 4
の候補になれる数は までである。
番目について考える時、候補の相手は二分探索で求めることができる。 の範囲に対して 以下の最大の要素のindex を求めれば良い。 は偶数なので、 ペアを作れば良い。二分探索する回数は である。また後ろから考えて、すでに 人ペアを作っている時で 番目について考える時、その候補に含まれる数のうち、 人はすでにペアになっているので候補の対象にはなりえない。よって、 分は候補の数から差し引く。
#318810 No.794 チーム戦 - yukicoder
実装ポイント
二分探索で求まるのは index の値であって、今回は数列を 0-indexed でとっているので、index の値に+1 する。ある数 以下の最大の index は upperBound(int[] a, int x) -1
で求めることができる。
どこに着目して考察するべきだったか
ソートして問題ないのでソート、条件の厳しいほうからマッチング。
何がバグっていたか
mod をとることを忘れない。
得た知見(典型ポイント)
- ソートしても問題がない
- 条件の厳しい値から考えていく
類題
- B - Powers of two 条件の厳しい要素からマッチングを考えます。