HDU1466 計算直線的交點數

2021-06-14 19:57:30 字數 1168 閱讀 8379

1、n條直線互不平行且無三線共點的最多交點數max=1+2+……(n-1)=n(n-1)/2

2、一般統計的方法:

假設一共有n=a+b條直線 即n條直線分成2組,分別為a條和b條),則

總的交點數= a內的交點數 +b內的交點數 +a,b之間的交點數

3、我們來分析加入第n條直線的情況(這裡以n=4為例):

(分類方法:和第n條直線平行的在a組,其餘在b組)

1、第四條與其餘直線全部平行 => 0+4*0+0=0;

2、第四條與其中兩條平行,交點數為0+(n-1)*1+0=3;

3、第四條與其中一條平行,這兩條平行直線和另外兩點直線的交點數為(n-2)*2=4,而另外兩條直線既可能平行也可能相交,因此可能交點數為:

0+(n-2)*2+0=4    或者  0+(n-2)*2+1=5    

4、 第四條直線不與任何一條直線平行,交點數為:

0+(n-3)*3+0=3  或0+ (n-3)*3+2=5  或0+ (n-3)*3+3=6

即n=4時,有0個,3個,4個,5個,6個不同交點數。

我們發現:

m條直線的交點方案數=(m-r)條平行線與r條直線交叉的交點數  + r條直線本身的交點方案

=(m-r)*r+r條之間本身的交點方案數(0<=r

#include #include #include #include #define max_n 20

#define max_intersects ((max_n+1)*max_n>>1)

int intersects[max_n+1][max_intersects];//交點陣列

int nums[max_n+1];//對應直線條數的肯能的交點數

bool i***ist[max_intersects+1];

int main()

} int count = 0;

for(j=0;jnums[i] = count;

} while(scanf("%d",&n)!=eof)else

printf(" %d",intersects[n][i]);

} printf("\n");

} return 0;

}

hdu 1466 計算直線的交點數

include intmain return0 一 n條直線把空間分成幾部分 現在說地是空間了,不是平面了,要注意!我們來討論一下吧 點分線 0維分1維 c n,1 c n,0 線分面 1維分2維 c n,2 c n,1 c n,0 麵分空間 2維分3維 c n,3 c n,2 c n,1 c n,...

hdu 1466 計算直線的交點數

平面上有n條直線,且無三線共點,問這些直線能有多少種不同交點數。比如,如果n 2,則可能的交點數量為0 平行 或者1 不平行 input 輸入資料報含多個測試例項,每個測試例項佔一行,每行包含乙個正整數n n 20 n表示直線的數量.output 每個測試例項對應一行輸出,從小到大列出所有相交方案,...

hdu1466 計算直線的交點數

題意 平面上有n條直線,且無三線共點,問這些直線能有多少種不同交點數。比如,如果n 2,則可能的交點數量為0 平行 或者1 不平行 分析 dp 設狀態 f i j 表示i條直線能否產生j個交點。有不同的交點數 n條直線中有平行線。n個點最多有n n 1 2個交點。i條直線中j j i 條平行線,i ...