' P '

whatever I will forget

A - AtCoder Group Contest 考え方

この問題は完全に勘違いしてた。。

勘違い

例)4グループ作成で1-12の数字が与えられる。
とりあえずsortして、 (1,2,3) (4,5,6) (7,8,9) (10,11,12)
7+8+9=24でいいっしょ?と思ったらWAの評価。
よーく見たら、下記の通りそのまんまで、チームの作り方に指定はなく、とりあえず下記になる決め合わせを決める。

N組のチームの強さの和としてありうる値のうち、最大の値を求めてください。

(1,5,6) (2,7,8) (3,9,10) (4,11,12)
5+7+9+11 = 32、ということでこっちのほうが最大化できる。

考えたこと

真ん中の数字を足し合わせばいいだけなので、正味xはどうでもいい。
12要素があるsortされたarrayがあるとすれば、それぞれ真ん中の値を取得して合計を求めるだけ。
(1,2,3,4,5,6,7,8,9,10,11,12)

(x, 11, 12) - 真ん中のarrayの位置はarray.length-2
(x,  9, 10) - 真ん中のarrayの位置はarray.length-4
(x,  7,  8) - 真ん中のarrayの位置はarray.length-6
(x,  5,  6) - 真ん中のarrayの位置はarray.length-8

じゃあ与えられたグループ数分ループさせて(iは1から始めさせる)、array.length-2*iとすれば中央の値とれるやん、となりました

参考

        Arrays.sort(strength);

        long targetStrength = 0;
        for(int i=1; i<=givenNumber; i++) { //givenNumberはグループ数です
            targetStrength += strength[strength.length-2*i];
        }