はまやんはまやんはまやん

hamayanhamayan's blog

Number Groups [HackerRank 101 Hack 52 A]

https://www.hackerrank.com/contests/101hack52/challenges/number-groups

1,3,5,7,9,11,...の奇数からなる数列がある。
これを(1),(3,5),(7,9,11),...のように1個,2個,3個,...と群数列として分ける。
第k群の数列の総和を求めよ。

解説

https://www.hackerrank.com/contests/101hack52/challenges/number-groups/submissions/code/1304324588

高校数学の群数列を解くようにしてやる。

(第k群の項数) = k
(第k群の初項は何番目) = top = sum{i=1..k-1}k = k * (k - 1) / 2
となるので、
(第k群の初項) = a1 = top * 2 + 1
(第k群の末項) = an = a1 + 2 * (k - 1)
より、
(第k群の総和) = k * (a1 + an) / 2
となるので、これを出力。

typedef long long ll;
ll K;
//---------------------------------------------------------------------------------------------------
void _main() {
    cin >> K;

    ll top = K * (K - 1) / 2;
    ll a1 = top * 2 + 1;
    ll n = K;
    ll an = a1 + 2 * (K - 1);

    ll ans = n * (a1 + an) / 2;
    cout << ans << endl;
}