[NOIP 2015 普及组 T1] 金币
天数的累加是1+2+3…..k
金币的增加是1^2 + 2^2 + 3^2 + …… + k^2
假设第k阶段(第i阶段有i天)总天数小于等n,第k+1阶段的总天数大于n天。
那么:k(1+k)/2<=n(等差数列求和公式) 解方程:k = (-1 + sqrt(1+8n))/2 ,另外一个根小于零,所以舍去。
k向下取整
#include <bits/stdc++.h>
using namespace std;
int main()
{
int n, k;
long long d = 0, s = 0;
cin >> n;
k = (-1 + sqrt(1 + 8 * n)) / 2;
for (int i = 1; i <= k; i++)
{
d += i;
s += i * i;
}
s += (n - d) * (k + 1);
cout << s << endl;
return 0;
}