1. 程式人生 > >平面分割

平面分割

image 需求 似的 一行 n+1 平面最多 .com img 測試

描述
說起佐羅,大家首先想到的除了他臉上的面具,恐怕還有他每次刻下的“Z”字。我們知道,一個“Z”可以把平面分為2部分,兩個“Z”可以把平面分為12部分,那麽,現在的問題是:如果平面上有n個“Z”,平面最多可以分割為幾部分呢?
說明1:“Z”的兩端應看成射線;
說明2:“Z”的兩條射線規定為平行的。
輸入
輸入數據的第一行是一個整數C,表示測試實例的個數,然後是C 行數據,每行包含一個整數n(0<n<=10000),表示“Z”字的數量。
輸出
對於每個測試實例,請輸出平面的最大分割數,每個實例的輸出占一行。
樣例輸入
2
1
2
樣例輸出
2
12

此類題有一固定做法——【解方程】

對於二維空間來說:f(x)=ax^2+bx+c;

對於三維空間:f(x)=ax^3+bx^2+cx+d;

此題中,顯然是二維的,只需求n=3時的情況,然後帶入可得;

n=3時,要求最多的,先看一條線段,當其中一條線與最多線相交時,即與六條線相交時;為31種。

然後解方程組即可得到a,b,c的值;方程可得,程序自然就出來了。

——【遞推】
每一組平行線相交後,就會較少一個面,
首先考慮一個類似的問題:

有N組直線,每組都由3條平行的直線構成,3條直線的間距可以調整。

那麽N組直線最多劃分出多少個區域?

這個問題就很容易求出來,3n(3n-1)/2+1

本題的答案,就是把每組3條平行直線變成Z,也就是在3n(3n-1)/2+1的基礎上再減2n即可

典型的遞推題 
    設f(n)表示n個z字型折線至多平面劃分數。 
    現在增加一條邊a,和3n條線都相交,增加3n+1個區域。 
    再增加一條邊b,與a平行,同樣增加3n+1個區域。 
    最後增加一條邊c,與已有的邊都相交,增加3n+3個區域。又因為要與a,b形成鋸齒形,所以又減去2*2個區域 
    所以得出遞推式 f(n)=f(n-1)+9*(n-1)+1 
 
----------------------------------------------------------------------
自己的思路
第條線都要與之前所有的線相交 所以之前有3(n-1)條線 因此會出現3*3(n-1)個線段
每個線段都會有一個新平面 又增加兩條射線 所以為9(n-1)+2 但是折線相鄰的線段只
能增加一個面 9(n-1)+2-1

技術分享圖片

平面分割