献给杭电五十周年校庆的礼物
http://acm.hdu.edu.cn/showproblem.php?pid=1290献给杭电五十周年校庆的礼物 |
Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others) |
Total Submission(s): 796 Accepted Submission(s): 512 |
Problem Description
或许你曾经牢骚满腹
或许你依然心怀忧伤 或许你近在咫尺 或许你我天各一方 对于每一个学子 母校 永远航行在 生命的海洋 今年是我们杭电建校五十周年,这是一个值得祝福的日子。我们该送给母校一个怎样的礼物呢?对于目前的大家来说,最好的礼物当然是省赛中的好成绩,我不能参赛,就送给学校一个DOOM III球形大蛋糕吧,这可是名牌,估计要花掉我半年的银子呢。 想象着正式校庆那一天,校长亲自操刀,把这个大蛋糕分给各地赶来祝贺的校友们,大家一定很高兴,呵呵,流口水了吧... 等一等,吃蛋糕之前先考大家一个问题:如果校长大人在蛋糕上切了N刀(校长刀法极好,每一刀都是一个绝对的平面),最多可以把这个球形蛋糕切成几块呢? 做不出这个题目,没有蛋糕吃的! 为-了-母-校-,为-了-蛋-糕-(不是为了DGMM,枫之羽最会浮想联翩...),加-油-! |
Input
输入数据包含多个测试实例,每个实例占一行,每行包含一个整数n(1<=n<=1000),表示切的刀数。
|
Output
对于每组输入数据,请输出对应的蛋糕块数,每个测试实例输出一行。
|
Sample Input
1 2 3 |
Sample Output
2 4 8 |
直线分平面:
可以这么理解: 第n条直线和n-1条直线相交,也就是最多有n-1个交点,最多被分成n段,每一段二分其所在的区域,所以最多多了n个区域, 其递推公式即为:f(n)=f(n-1)+n; 递推一下,就得到f(n)=1/2*(n*n+n)+1;
平面切球:
可以这么理解: 若要第四个平面将空间分为最多部分,就要它与前三个平面都相交,且交线不重合。则第四个平面与前三个平面都相交,交线不重合,有三条交线,这三条交线都在第四个平面内,那么要想使这四个平面分空间为最多部分,就要使这三条交线分一个平面为最多部分。显然,三条直线分一个平面最多为7部分。所以,四个平面分空间数最多为:三个平面最多分平面数加上三条直线最多分平面的部分数:8+7=15。 推广到一般情况,n个平面最多可分空间为f(n)部分,第n个平面与n-1个平面分别相交且交线不重合,问题转化为n-1条直线最多将一个平面分成几部分。 递推公式即为:g(n)=g(n-1)+f(n-1); 把上面的公式递推一下,就得到通项公式:g(n)=(n*n*n+5*n+6)/6;
另外,这类问题一般都有固定的公式,告诉大家一个技巧:二维的一般是f(x)=a*x^2+b*x+c,三维的一般是f(x)=a*x^3+b*x^2+c*x+d. 用带定系数法求出各个系数就行了。
下面是代码:
1 #include<iostream> 2 #include<cstdio> 3 using namespace std; 4 int main() 5 { 6 int n ; 7 while(~scanf("%d",&n)) 8 { 9 int g =(n*n*n+5*n+6)/6; 10 printf("%d\n",g); 11 } 12 return 0; 13 }