HDU2050分割問題

題目出自杭電
題目

相關的問題資料可以在以下鏈接中找到:
http://blog.csdn.net/wu_lai_314/article/details/8219236

(1)先講n條直線最多分平面問題
題目大致如:n條直線,最多可以把平面分爲多少個區域。

  析:當有n-1條直線時,平面最多被分成了f(n-1)個區域。則第n條直線要是切成的區域數最多,就必須與每條直線相交且不能有同一交點。這樣就會得到n-1個交點。這些交點將第n條直線分爲2條射線和n-2條線段。而每條射線和線斷將已有的區域一分爲二。這樣就多出了2+(n-2)個區域。
       故:f(n)=f(n-1)+n
              =f(n-2)+(n-1)+n
                    ……
              =f(1)+1+2+……+n
              =n(n+1)/2+1

(2) 折線分平面(hdu2050)
根據直線分平面可知,由交點決定了射線和線段的條數,進而決定了新增的區域數。當n-1條折線時,區域數爲f(n-1)。爲了使增加的區域最多,則折線的兩邊的線段分別要和n-1條折線的邊相交,即2 * (n-1)條線段相交。那麼新增的線段數爲4 *(n-1),射線數爲2。但要注意的是,折線本身相鄰的兩線段只能增加一個區域。

   故:f(n)=f(n-1)+4(n-1)+2-1
          =f(n-1)+4(n-1)+1
          =f(n-2)+4(n-2)+4(n-1)+2
                 ……
          =f(1)+4+4*2+……+4(n-1)+(n-1)   
          =2n^2-n+1
#include <stdio.h>
int main()
{
    int a,n;
    scanf("%d",&a);
    while(a--)
    {
        scanf("%d",&n);
        printf("%d\n",2*n*n-n+1);
    }
    return 0;
}
發佈了47 篇原創文章 · 獲贊 6 · 訪問量 1萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章