solution:
這題可以暴力,真的,第一遍抱著試試的心理用暴力過了,資料太水,不到立方的效率竟然過了。
正解容斥原理(來自大佬
為了解決這道題目,我們需要有乙個轉換的思想。因為三角形總數,是等於單色三角形的數量加上不單色三角形的數量(好拗口),而三角形的總數等於c(n,3)(因為任意三個點都可以連成乙個三角形),所以求單色三角形的數量,就可以轉化為求不單色三角形的數量,
我們發現,對於乙個點,如果它往外連出了兩條異色邊,那麼這兩條異色邊一定會與另一條邊構成乙個不單色三角形。
因為每乙個點的出度都為n-1,所以,如果記點i連出的紅色邊的數量為d[i],那麼它連出的藍色邊的數量就為(n-1-d[i]),那麼此點連出的異色邊的數量(一對一對地數)就為(d[i])(n-1-d[i])。根據上圖,點a,b連出的不單色三角形的數量會有重複,所以不單色三角形的數量為異色邊總對數除以2。
綜上,單色三角形的數量=三角形總數-不單色三角形的數量=
1 #include2 #include3using
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...