1. 程式人生 > >[解題報告]hdoj1249(平面分割)

[解題報告]hdoj1249(平面分割)

大概題意:若干case,每個給定數字n,表示平面上有n個三角形,輸出這n個三角形最多能把平面分割成多少平面。

例,1=>2     2=>8    

這個用了數學推理,類似的推理還有,n條直線最多能把一個平面分割成多少個平面,n個折線,n個橢圓……

貼上兩個推理的帖子地址

順便記一下幾個公式:

直線:f(n)=f(n-1)+n=1+n(n-1)/2;

折線:f(n)=f(n-1)+(4n-3)=2*n*n-n+1;

三角形:f(n)=f(n-1)+6(n-1)=2+3*n*(n-1);

橢圓:f(n)=f(n-1)+2(n-1)=2+n(n-1);


對於這道三角形的,可以發現,每新增一個三角形時,新三角形的每一條邊,最多可與之前的(n-1)個三角形的兩條邊相交,於是新三角形的每一條邊可以割到2*(n-1)-1個新平面(減去最大的那個平面)

所以新三角形的3條邊可以割到6*(n-1)-3個新平面

再加上新三角形的三個角,即6*(n-1)個

所以s(n)=s(n-1)+6*n*(n-1)

#include<stdio.h>
using namespace std;
int main()
{
    int kase;
    scanf("%d",&kase);
    int n;
    while(kase--)
    {
        scanf("%d",&n);
        printf("%d\n",2+3*n*(n-1));
    }
    return 0;
}