题目链接:三角形
题目大意:中文题目
分析:
递推
1、一条线段和一条射线都可以将平面分成两个部分
2、折线的端点处只能将平面分成一个部分
一、首先考虑直线的情况
如上图,一条直线将一个平面分成两个,两个平面分成4个,当加入第三条直线时,与前两条直线产生了两个交点,将第三条直线分成了1条线段和两条射线,将原有的区域一分为二,增加了3个区域。
递推规律如下:
假设对前n-1条直线有f(n-1)个区域
当增加1条直线的时候,增加了n-1个交点,这n-1个交点产生了n-2条线段和2条射线。
增加了n-2+2=n个区域
于是f(n)=n+f(n-1)
得发f(n)=(n+2)*(n-1)/2+2
二、考虑折线的情况
如图,当只有一条直线的时候,将平面划分为两个区域
如右图,加上第n条折线时,第n条折线的每条射线分别和前n-1条折线相交,即和前2(n-1)条射线相交,增加了2(n-1)个交点,即增加了2(n-1)条线段和一条射线
注意现在暂时不算蓝色折线交点,因为折线的交点值增加一个区域,即增加了2(n-1)-1条线段和1条射线,共增加了2(2(n-1))个区域
最后在加上第n条折线自带的交点,即途中蓝色节点所增加的区域:1
即增加了2(2(n-1))+1个区域
递推方程为f(n)=4n-3+f(n-1),f(1)=2
三、考虑线段的情况
如图,当只有一个三角形时,划分为2个区域
当加上第n个三角形时,每条边最多与前n-1个三角形,即3*(n-1)个线段相交,如图,运用第2个部分的结论,但是此时是增加了2(n-1)-1条线段和2条蓝色顶点带来的线段,共增加了3(2(n-1)-1)个区域,再加上3个蓝色定点,共增加了6(n-1)个区域
所以递推方程为f(n)=6*(n-1)+f(n-1),f(1)=2
代码
#include <stdio.h>
int main()
{
//freopen("in.txt","r",stdin);
int T,n;
scanf("%d",&T);
while(T--){
scanf("%d",&n);
printf("%d\n",3*n*(n-1)+2);
}
return 0;
}