題目大意:
平面上有n個點,其中任意2點不重合,任意3點不共線。我們等概率地選取乙個點a,再在剩下的n-1個點中等概率地選取乙個點b,再在剩下的n-2個點中等概率地選取乙個點c。然後我們計算傷害倍率d。作abc外接圓,每乙個位於弧bc和線段bc之間的點計1倍,每乙個位於弧bc上的點(包括b,c兩點)計1/2倍,特別的,點a計1倍。將這些倍率全部加起來得到傷害倍率d。注意:弧bc是指,abc外接圓上b到c而不包含點a的部分,這個弧不一定是劣弧。給定這n個點的座標,你需要求出d的期望。為了簡單起見,你只需要輸出2dn
(n−1
)(n−
2)
2dn(n-1)(n-2)
2dn(n−
1)(n
−2)的值,可以看出這是乙個整數。
題解:考慮每次abc這三個點對答案的貢獻總和為4n3
‾4n^
4n3
單獨計算,剩下相當於是對每個三角形畫個外接圓然後再看乙個點是否在弧和弦之間或在弧上。
發現d在abc(a和d相對)的外接圓弧和弦之間當且僅當,abcd構成凸四邊形且a+d
≥π
a+d\ge \pi
a+d≥
π。特殊的當a+d
=π
a+d=\pi
a+d=
π時四點共圓,任選其中三點,另外乙個點一定在弧上,對答案總貢獻4
44。否則a+d
>π,
b+
c<
πa+d>\pi,b+c<\pi
a+d>π,
b+c<
π,那麼a和d分別剩下三個點的外接圓的弧和弦之間,b和c則不在,因此對答案貢獻也是444。
因此問題轉化為統計凸四邊形個數(非凸四邊形任取三點都無貢獻)。
考慮乙個四邊形四個頂點兩兩連邊,凸四邊形有四種情況,剩下兩個點在同側,兩種情況在異側;非凸四邊形則分別有三種情況。
因此設有a
aa個凸四邊形,b
bb非凸四邊形,列舉點對統計多少剩下兩點在異側/同側方案數,記作x,y
x,yx,
y,則2a+
3b=x
,4a+
3b=y
,a=y
−x
22a+3b=x,4a+3b=y,a=\frac
2a+3b=
x,4a
+3b=
y,a=
2y−x
,最後答案時4n3
‾+8a
4n^+8a
4n3+8
a。(後來改了一發為了避免被卡atan2精度導致**有點奇妙(大霧
#include
#define rep(i,a,b) for(int i=a;i<=b;i++)
#define lint long long
#define db long double
#define debug(x) cerr<<#x<<"="<#define sp <<" "
#define ln inline
intinn()
const
int n=
1010
;struct p
inline
intgetqd()
inline p operator-
(const p &p)
const
inline db cross
(const p &p)
const
inline bool operator<
(const p &p)
const
}p[n]
;namespace solve_space
inline
intsolve
(p *_p,
int _n,
const p &s,lint &x,lint &y)
return0;
}}using solve_space:
:solve;
intmain()
計算幾何與計算幾何與
博主這裡曾經學過計算幾何 下文簡稱jj 所以沒有證明或者說明某些演算法,不適合初學者食用 用一道例題及黃學長的 來理解 黃學長 include include include include include include include include include include define...
計算幾何 幾何基礎
這章早在2017年寒假就在培訓的時候由來自清華的hta老師上過了 但是本蒟蒻那時候並不是懂的太多 所以這週ww老師又上了一遍 大概記錄一下 大概就跟高中必修4的平面向量差不多 有上過的應該都會 a x1,y1 b x2,y2 a b x1x2 y1y2 a b a b cos a,b 運用 若a與b...
caioj 計算幾何 面積 計算幾何 叉積
題意 在乙個平面座標系上隨意畫一條有n個點的封閉折線 按畫線的順序給出點的座標 保證封閉折線的任意兩條邊都不相交。最後要計算這條路線包圍的面積。用叉積有關知識解決。重要結論 abs 三點的叉積 2為這三點圍成的三角形的面積。簡要證明 上圖中,黑色的三角形面積為矩形 三個三角形,設數,計算,合併同類項...