我们看到过很多直线分割平面的题目,今天的这个题目稍微有些变化,我们要求的是n条折线分割平面的最大数目。比如,一条折线可以将平面分成两部分,两条折线最多可以将平面分成7部分,具体如下所示。
Input
输入数据的第一行是一个整数C,表示测试实例的个数,然后是C 行数据,每行包含一个整数n(0<n<=10000),表示折线的数量。
Output
对于每个测试实例,请输出平面的最大分割数,每个实例的输出占一行。
Sample Input
2
1
2
Sample Output
2
7
1 /* 2 pro:http://acm.upc.edu.cn/problem.php?cid=1111&pid=9; 3 name:徒有羡鱼情; 4 time:2015—5-23/11:53 5 */ 6 /*这个题的本意是用递归思想来解决的,但是肯定没有公式快,下面介绍公式法: 7 假如只是直线 8 n 区域 9 1 2 10 2 4 11 3 7 12 4 11 13 n 1 + n * (n + 1) / 2 14 我们可以将折线看为两条交叉直线去掉顶点外的另一部分,则若有k = 2 * n条交叉直线 区域数 = 1 + k * (2 * k + 1) - 多出的部分;而若有k条折线,就会比k条交叉直线少k * 2个区域;则公式为1 + k * (2 * k + 1) - 2 * k; 15 */ 16 #include <iostream> 17 #include <stdio.h> 18 #include <stdlib.h> 19 #include <string.h> 20 #include <math.h> 21 using namespace std; 22 #define M 200 + 10 23 int main() 24 { 25 //freopen("in.txt","r",stdin); 26 long long int a; 27 int c; 28 scanf("%d",&c); 29 while(c --) 30 { 31 scanf("%lld",&a); 32 printf("%lld\n",a * (2 * a + 1) + 1 - a * 2); 33 } 34 return 0; 35 }