折线分割平面
Describe
我们看到过很多直线分割平面的题目,今天的这个题目稍微有些变化,我们要求的是n条折线分割平面的最大数目。比如,一条折线可以将平面分成两部分,两条折线最多可以将平面分成7部分,具体如下所示。
Input
输入数据的第一行是一个整数C,表示测试实例的个数,然后是C行数据,每行包含一个整数n
(0<n<=10000)
(
0
<
n
<=
10000
)
,表示折线的数量。
Output
对于每个测试实例,请输出平面的最大分割数,每个实例的输出占一行。
Sample Input
2
1
2
Sample Output
2
7
显然要推出递推表达式。设 f(n) f ( n ) 表示 n n 条折线的最大分割数,要使分割数达到最大,需要让新增的折线两边与原来的条折线两边相交,如此才能产生最大数量的交点,新增交点数为 4(n−1) 4 ( n − 1 ) ,这些交点将新增的这条折线分成2条射线和 4(n−1) 4 ( n − 1 ) 条线段。多出的两条射线分割了原来的无界区(即不完全是由线段包围形成的区域),即无界区分割数会多2;剩下的线段将其经过的有界区内最小分割区域分成两个,特殊的是新增折线顶点的两线段会组成一个新的区域,由此有界区分割数会多 4(n−1)−1 4 ( n − 1 ) − 1 ,得到递推公式:
#include<iostream>
#include<cmath>
using namespace std;
int main()
{
int t,n;
cin>>t;
while(t--)
{
cin>>n;
cout<<2*n*n-n+1<<endl;
}
return 0;
}