[NOIP 2015 普及组 T1] 金币

作者: qiqi 分类: CSP-J 发布时间: 2025-10-06 12:53

查看题目

天数的累加是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;
}

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

标签云