折
线
分
割
平
面
\color{#00F}{折线分割平面}
折线分割平面
T
i
m
e
L
i
m
i
t
:
2000
/
1000
M
S
(
J
a
v
a
/
O
t
h
e
r
s
)
\color{green}{Time Limit: 2000/1000 MS (Java/Others)}
TimeLimit:2000/1000MS(Java/Others)
M
e
m
o
r
y
L
i
m
i
t
:
65536
/
32768
K
(
J
a
v
a
/
O
t
h
e
r
s
)
\color{green}{Memory Limit: 65536/32768 K (Java/Others)}
MemoryLimit:65536/32768K(Java/Others)
T
o
t
a
l
S
u
b
m
i
s
s
i
o
n
(
s
)
:
15796
\color{green}{Total Submission(s): 15796}
TotalSubmission(s):15796
A
c
c
e
p
t
e
d
S
u
b
m
i
s
s
i
o
n
(
s
)
:
10897
\color{green}{Accepted Submission(s): 10897}
AcceptedSubmission(s):10897
P
r
o
b
l
e
m
D
e
s
c
r
i
p
t
i
o
n
\color{blue}{Problem Description}
ProblemDescription
我们看到过很多直线分割平面的题目,今天的这个题目稍微有些变化,我们要求的是n条折线分割平面的最大数目。比如,一条折线可以将平面分成两部分,两条折线最多可以将平面分成7部分,具体如下所示。
I
n
p
u
t
\color{blue}{Input}
Input
输入数据的第一行是一个整数C,表示测试实例的个数,然后是C 行数据,每行包含一个整数n(0<n<=10000),表示折线的数量。
O
u
t
p
u
t
\color{blue}{Output}
Output
对于每个测试实例,请输出平面的最大分割数,每个实例的输出占一行。
S
a
m
p
l
e
I
n
p
u
t
\color{blue}{Sample Input}
SampleInput
2 1 2
S
a
m
p
l
e
O
u
t
p
u
t
\color{blue}{Sample Output}
SampleOutput
2 7
分析:递推题
1、我们先来看看增加直线的情况:
不添加直线时,只有 1 1 1 个面;添加一条直线时,有 2 2 2 个面; 添加两条直线时,有 4 4 4 个面;再往后添加直线时,为使分隔面尽可能的多,则第 n n n 条直线需与前 n − 1 n - 1 n−1 条直线相交且不存在三线或三线以上交于一点的情况。这样的话,在平面中,增加第 n n n 条直线就会增加 n − 1 n - 1 n−1 个交点。也不难发现,平面中增加 i i i 个点就会增加 i + 1 i + 1 i+1 个面。所以 n n n 条直线分割平面最大数是 1 + 1 + 2 + 3 + . . . + n = ( n 2 + n + 2 ) / 2 1 + 1 + 2 + 3 + ... + n = (n^2 + n + 2) / 2 1+1+2+3+...+n=(n2+n+2)/2
2、我们再来看看增加平行线的情况:
一组平行线都不添加时,只有
1
1
1 个面;添加一组平行线时,有
3
3
3 个面;添加两组平行线时,有
9
9
9 个面;再往后添加平行线时,和上述添加直线情况类似。当第
n
n
n 次添加平行线时,前面已经有
2
∗
(
n
−
1
)
2 * ( n - 1)
2∗(n−1) 条直线了,所以第$ n$ 组平行线,即
2
n
−
1
2n - 1
2n−1 条和第
2
n
2n
2n 条直线添加进去的时候,各增加了
2
∗
(
n
−
1
)
2 * ( n - 1)
2∗(n−1)个点,也就是增加了
2
∗
(
n
−
1
)
+
1
2 * ( n - 1) + 1
2∗(n−1)+1 个面。所以第
n
n
n 次添加平行线增加的总面数是 2 * [ 2 * ( n - 1) + 1 ] = 4 * n - 2 .所以 n 组平行线分隔的总面数是
1
+
(
3
+
4
×
1
−
2
)
+
(
3
+
4
×
1
−
2
+
4
∗
2
−
2
)
+
…
…
+
(
3
+
4
×
1
−
2
+
4
×
2
−
2
+
…
…
+
4
×
n
−
2
)
=
2
∗
n
2
+
1
1+(3+4\times1-2)+(3+4\times1-2+4*2-2)+……+(3+4\times1-2+4\times2-2+……+4 \times n-2)=2*n^2+1
1+(3+4×1−2)+(3+4×1−2+4∗2−2)+……+(3+4×1−2+4×2−2+……+4×n−2)=2∗n2+1 .
3、我们再来看看本题增加折线的情况:
平行线的一端相交就成了折线,相交后,有两个面就会合为一个面,所以 n n n 组平行线变成折线以后,就会减少 n n n 个面。所以本题 n n n 条折线就分割出 2 × n 2 − n + 1 2 \times n^2-n+1 2×n2−n+1 个面。
#include <bits/stdc++.h>
using namespace std;
int main()
{
int t,n;
scanf("%d",&t); while(t--)
{
scanf("%d",&n);
printf("%d\n",2*n*n-n+1);
}
return 0;
}