HDoj 2050 折线分割平面
Problem Description
我们看到过很多直线分割平面的题目,今天的这个题目稍微有些变化,我们要求的是n条折线分割平面的最大数目。比如,一条折线可以将平面分成两部分,两条折线最多可以将平面分成7部分,具体如下所示。


Input
输入数据的第一行是一个整数C,表示测试实例的个数,然后是C 行数据,每行包含一个整数n(0<n<=10000),表示折线的数量。
Output
对于每个测试实例,请输出平面的最大分割数,每个实例的输出占一行。
Sample Input
2
1
2
Sample Output
2
7
Author
lcy
Source
Recommend
首先我们先看n条直线切割的最大平面数
n 最大平面数
1 0 + 1*2 2
2 0 + 2*2 4
3 1 + 2*3 7
4 1+2 + 2*4 11
5 1+2+3 + 2*5 16
n 1+2+...+(n-2) + 2*n (n²+n+2)
当变成折线时,
因为每条折线最多单独分割两个区域,而直线是四个,
因此如果把每两条直线的一个端点相交,就变成了一条折线,被分割的区域就减少2。
也就是每2n条直线,每每两条端点相交,变成了n条折线,被分割的区域就减少了2*n;
因此,如果要求n条折线分割的平面数,只需求2n条直线分割平面数m,再求出m-2n的大小即是n条折线切割的平面数。
因此当直线切割的最大平面数 F(n) = n²+n+2时
折线切割的最大平面数H(n)=F(2n)-2*n=2n²-n+1;
C语言代码如下:
#include<stdio.h> long long nj(int); int main() { int n,m; scanf("%d",&n); while(n--) { scanf("%d",&m); printf("%ld\n",(long)m*m*2-m+1); } }
参考文章1(本文所参考的):https://blog.csdn.net/qq_40907279/article/details/78708856
参考文章3(递推,找规律):https://blog.csdn.net/hpulw/article/details/50579567
浙公网安备 33010602011771号