2020年11月27日金曜日

CS Academy Round #79 - Groups

計算量の説明がどこにも書かれていなくて困った。以下は自分の理解。

ii番目のクエリで与えられるPiP_i人の人間について、代表者の人数をxix_i、代表者以外の人数をyiy_iとする。xix_i個のグループそれぞれについて、走査して離脱しないメンバーが見つかったら打ち切るのが想定解らしい。D=105D=10^5として1つのクエリで調べるノード数は最大でmin(xiyi,D)\min(x_iy_i, D)なので、計算量はi=1Qmin(xiyi,D)\sum_{i=1}^Q \min(x_iy_i, D)と書ける。これを評価したい。

まず、i=1QPi=i=1Q(xi+yi)D\sum_{i=1}^Q P_i = \sum_{i=1}^Q (x_i + y_i) \le Dという制約がある。xi+yix_i + y_iが一定のときxiyix_iy_ixi=yix_i = y_iで最大値を取るので、i=1QxiD/2\sum_{i=1}^Q x_i \le D/2という条件下でi=1Qmin(xi2,D)\sum_{i=1}^Q \min(x_i^2, D)を評価する問題ということにいなる。面倒なので、代わりにi=1QxiD\sum_{i=1}^Q x_i \le Dとしておく。

xi+xjx_i + x_jが一定のとき、xi2+xj2x_i^2 + x_j^2xj=0x_j=0で最大になる[1]ので、i=1Qxi2\sum_{i=1}^Q x_i^2を大きくするには値をできるだけ偏らせるのが最善である。ただし、1つの変数をD\sqrt Dより大きくしても意味がないので、最大値を取る配分の一つは(x1,x2,...,xQ)=(D,...,D,0,...,0)(x_1, x_2, ..., x_Q) = (\sqrt D, ..., \sqrt D, 0, ..., 0)という形になる。i=1QxiD\sum_{i=1}^Q x_i \le Dより、最大でD\sqrt D個程度のxix_iD\sqrt Dにできるから、このときi=1Qmin(xi2,D)=DD\sum_{i=1}^Q \min(x_i^2, D) = D\sqrt Dと見積もれる。


  1. 平面上で、原点を中心とするマンハッタン距離に関する円と、ユークリッド距離に関する円を思い浮かべればよい。 ↩︎