分割平面(遞推之分割品面)

分割平面
總時間限制: 1000ms 內存限制: 65536kB
描述
設有n條封閉曲線畫在平面上,而任何兩條封閉曲線恰好相交於兩點,且任何三條封閉曲線不相交於同一點,問這些封閉曲線把平面分割成的區域個數。

這裏寫圖片描述

輸入
一個數n(1≤n≤46341)
輸出
一個數,這些曲線把平面分割成的個數總和
樣例輸入

3

樣例輸出

8

提示
尋找遞推式

思路點拔:五大經典遞推關係中的一種,在這裏我在仔細證明一下這種問題的遞推式
解:設an爲n條封閉曲線把平面分割成的區域個數。 由圖可以看出:a2-a1=2;a3-a2=4;a4-a3=6
這裏寫圖片描述
從這些式子中可以看出an-an-1=2(n-1)。當然,上面的式子只是我們通過觀察4幅圖後得出的結論,它的正確性尚不能保證。下面不妨讓我們來試着證明一下。當平面上已有n-1條曲線將平面分割成an-1個區域後,第n條曲線每與曲線相交一次,就會增加一個區域,因爲平面上已有了n-1條封閉曲線,且第n條曲線與已有的每一條閉曲線恰好相交於兩點,且不會與任兩條曲線交於同一點,故平面上一共增加2(n-1)個區域,加上已有的an-1個區域,一共有an-1+2(n-1)個區域。所以本題的遞推關係是an=an-1+2(n-1),邊界條件是a1=1。
這樣寫應該已經很明確了,上代碼吧!

#include<cstdio>
long long a[46350]={0,2}; //a數組用來遞推,注意要使用longlong類型
int main()
{
    int n;
    scanf("%d",&n);//輸入有多少條曲線
    for(int i=2;i<=n;i++) //循環枚舉曲線數
    {
        a[i]=a[i-1]+2*(i-1); //遞推式
    }
    printf("%lld",a[n]); //輸出解
    return 0; //結束
}
/*代碼量超級短,但是還是那句話,想到了就簡單,沒想到就複雜,這些題唯一的祕訣就是
多多練習,這種題也經常在競賽中出現,所以要多想一想,在草稿紙上多算一算,才能找出
正確的遞推式哦~*/
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章