hdu1290 献给杭电五十周年校庆的礼物

Problem Description
或许你曾经牢骚满腹
或许你依然心怀忧伤
或许你近在咫尺
或许你我天各一方

对于每一个学子
母校
永远航行在
生命的海洋

今年是我们杭电建校五十周年,这是一个值得祝福的日子。我们该送给母校一个怎样的礼物呢?对于目前的大家来说,最好的礼物当然是省赛中的好成绩,我不能参赛,就送给学校一个DOOM III球形大蛋糕吧,这可是名牌,估计要花掉我半年的银子呢。

想象着正式校庆那一天,校长亲自操刀,把这个大蛋糕分给各地赶来祝贺的校友们,大家一定很高兴,呵呵,流口水了吧…

等一等,吃蛋糕之前先考大家一个问题:如果校长大人在蛋糕上切了N刀(校长刀法极好,每一刀都是一个绝对的平面),最多可以把这个球形蛋糕切成几块呢?

做不出这个题目,没有蛋糕吃的!
为-了-母-校-,为-了-蛋-糕-(不是为了DGMM,枫之羽最会浮想联翩…),加-油-!

Input
输入数据包含多个测试实例,每个实例占一行,每行包含一个整数n(1<=n<=1000),表示切的刀数。

Output
对于每组输入数据,请输出对应的蛋糕块数,每个测试实例输出一行。

Sample Input
1
2
3

Sample Output
2
4
8

刚开始看题的时候以为是直线分割平面,但怎么也算不出当n=3时输出为8;后来看了网上dalao们的博客之后又审题发现是平面分割空间(虽然空间学的不好),原理的话可以百度dalao们的博客。(但我是直接记公式的)直线分割平面的公式为f[n]=1+(nn+n)/2; 而平面分割空间的公式为h[n]=h[n-1]+f[n-1],相消法可得到h[n]=h[n]+f[1]+…+f[n-1]=2+ (n-1)+{ [ 11+22+…(n-1)(n-1) ]+[ 1+2+…n-1 ] }/2=(nnn+5*n+6)/6;
再附加一个公式: 11+22+…n*n=n(n+1)(2n+1)/6 ,即可推倒出来。

#include
#define ll long long
int main()
{
	ll n;
	while(scanf("%lld",&n)!=EOF)
	{
		ll ans=(n*n*n+5*n+6)/6;
		printf("%lld\n",ans);
	}
}

你可能感兴趣的:(杭电)