POI1997 單色三角形

2022-05-01 03:18:10 字數 905 閱讀 9449

solution:

這題可以暴力,真的,第一遍抱著試試的心理用暴力過了,資料太水,不到立方的效率竟然過了。

正解容斥原理(來自大佬

為了解決這道題目,我們需要有乙個轉換的思想。因為三角形總數,是等於單色三角形的數量加上不單色三角形的數量(好拗口),而三角形的總數等於c(n,3)(因為任意三個點都可以連成乙個三角形),所以求單色三角形的數量,就可以轉化為求不單色三角形的數量,

我們發現,對於乙個點,如果它往外連出了兩條異色邊,那麼這兩條異色邊一定會與另一條邊構成乙個不單色三角形。

因為每乙個點的出度都為n-1,所以,如果記點i連出的紅色邊的數量為d[i],那麼它連出的藍色邊的數量就為(n-1-d[i]),那麼此點連出的異色邊的數量(一對一對地數)就為(d[i])(n-1-d[i])。根據上圖,點a,b連出的不單色三角形的數量會有重複,所以不單色三角形的數量為異色邊總對數除以2。

綜上,單色三角形的數量=三角形總數-不單色三角形的數量=

1 #include2 #include3

using

namespace

std;

4int

n,m,ans;

5int d[1001];6

intread() 13}

14for(; ch>='

0'&&ch<='

9'; ch=getchar())

17return s*f;18}

19int

main()

28for(int i=1; i<=n; ++i)

31 printf("

%d\n

",n*(n-1)*(n-2)/6-ans/2

);32

return0;

33 }

單色三角形問題結論

問題模型 空間裡有n個點,任意三點不共線。每兩個點之間都用紅色或者黑色線段鏈結。如果乙個三角形的三條邊同色,責成這個三角形是單色三角形。對於給定的紅色線段列表,找出單色三角形的個數。分析 如果直接找需要列舉所有的三個點的組合,有c n,3 種組合,當n比較大的時候,需要列舉的組合很多,複雜度為o n...

求大三角形中三角形個數

一道筆試程式設計題要求求乙個大三角形中所有小三角形的個數,大約是下面這種情況 首先想到是的將問題由求邊長為n的三角形個數 求邊長為n 1的三角形個數 求邊長為1的三角形個數 1,回溯求得所有三角形個數。但是再仔細一看因為有重疊三角形和倒置的三角形,所以這個方法不可行。接著找到三角形個數由三部分組成 ...

經典演算法 (三)帕斯卡三角形(楊輝三角形)

楊輝三角,是二項式係數在三角形中的一種幾何排列。在歐洲,這個表叫做帕斯卡三角形。帕斯卡 1623 1662 是在1654年發現這一規律的,比楊輝要遲393年,比賈憲遲600年。簡介 楊輝三角,是二項式係數在三角形中的一種幾何排列。在歐洲,這個表叫做帕斯卡三角形。帕斯卡 1623 1662 是在165...