Three-person team working

2 secs 1024 MB
ueta's icon ueta

解説

この問題は愚直に解くとO(N3)O(N^3)ですが 数式をいじるとO(N)O(N)になる問題です。

解法を22つ示します。

解法11

包除原理で解けます。AA の和の33 つの積を SS とすると

 S=(A1+A2+A3++AN)(A1+A2+A3++AN)(A1+A2+A3++AN)\ S = (A_1 + A_2 + A_3 + ⋯ + A_N)*(A_1 + A_2 + A_3 + ⋯ + A_N)*(A_1 + A_2 + A_3 + ⋯ + A_N)

これを解くと求めたい式 TT

 S=\ S =

 (A13+A23++AN3)\ (A_1^{3} + A_2^{3} + ⋯ + A_N^{3})   

 +3i=1Nj=1NAi2Aj(ij)\ + 3 * \sum_{i=1}^{N} \sum_{j=1}^{N} A_i^{2}*A_j (i \neq j) \\

 +6T\ + 6 * T

11項目は愚直,22項目は以下のように展開するとO(N)O(N) で算出できる。

 i=1NAi2(j=1NAj Ai) \ \sum_{i=1}^{N} A_i^{2} ( \sum_{j=1}^{N} A_j \ - A_i )\

よって求めたい式TTSSから不要部分を引き、66で割ると算出できる。

解法22

式で考える。

 Si\ S_i を 学生 i(1iN)\ i (1 \leq i \leq N) 以上NN以下の学生間において、 22人組の全ての組み合わせのパフォーマンスの和とすると 求めたい数値は

 A1S2+A2S3+A3S4++AN2SN1\ A_1*S_2 + A_2*S_3 + A_3*S_4 + ⋯ + A_{N-2} * S_{N-1}

 Si\ S_i  O(N)\ O(N) で算出できる。

よって 累積和をあらかじめ計算しておくと O(N)\ O(N) で計算できる。