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; }