2019牛客暑期多校訓練營(第一場)----F-Random Point in Triangle

首先發出題目鏈接:
鏈接:https://ac.nowcoder.com/acm/contest/881/F
來源:牛客網
涉及:概率期望

點擊這裏回到2019牛客暑期多校訓練營解題—目錄貼


題目如下:
在這裏插入圖片描述
在這裏插入圖片描述
題目好水啊


首先將ABC\triangle_{ABC}這樣分解,如圖所示
在這裏插入圖片描述
解釋一波:

A,B,CA',B',C'分別爲AB,AC,BCAB,AC,BC中點OOABC\triangle_{ABC}重心

h1,h0,h2h_1,h_0,h_2分別爲AAB,ABO,OBC\triangle_{AA'B'},\triangle_{A'B'O},\triangle_{OBC},且h0+h1+h2h_0+h_1+h_2ABC\triangle_{ABC}

O1,O2O_1,O_2分別爲AAB,ABO\triangle_{AA'B'},\triangle_{A'B'O}重心


首先確定一點:若P落在四邊形AAOBAA'OB'內,那麼max{SAPB,SBPC,SCPA}=SBPCmax\left\{S_{APB},S_{BPC},S_{CPA}\right\}=S_{BPC}

然後再來判斷h0,h1,h2h_0,h_1,h_2之間的關係:
由於ABO\triangle_{A'B'O}BCO\triangle_{BCO}相似,且2OA=OC2|OA'|=|OC|h2=2h0h_2=2h_0;
由於h1=h0+h2h_1=h_0+h_2h1=3h0h_1=3h_0
在這裏插入圖片描述


1.考慮P點落在AAB\triangle_{AA'B'}

如圖所示,P點落在AAB\triangle_{AA'B'}中時,SPBCS_{PBC}的期望剛好是SO1BCS_{O_1BC}
在這裏插入圖片描述
此時ESPBC=SO1BC=12(h0+h0+2h0)BC=2h0BCE_{S_{PBC}}=S_{O_1BC}=\frac {1}{2}(h_0+h_0+2h_0)|BC|=2h_0|BC|
 
2.考慮P點落在OAB\triangle_{OA'B'}

如圖所示,P點落在OAB\triangle_{OA'B'}中時,SPBCS_{PBC}的期望剛好是SO2BCS_{O_2BC}
在這裏插入圖片描述
由於O2AB\triangle_{O_2A'B'}的高爲13h0\frac 1{3}h_0所以O2BC\triangle_{O_2BC}的高爲(h013h0+2h0)=83h0(h_0-\frac 1{3}h_0+2h_0)=\frac 8{3}h_0

此時ESPBC=SO2BC=1283h0BC=43h0BCE_{S_{PBC}}=S_{O_2BC}=\frac {1}{2}*\frac 8{3}h_0|BC|=\frac 4 {3}h_0|BC|


由於3SABO=SAAB3S_{A'B'O}=S_{AA'B'},所以P點落在AAB\triangle_{AA'B'}的概率爲34\frac 3 {4},落在OAB\triangle_{OA'B'}的概率爲13\frac 1{3}

所以P點落在四邊形AAOBAA'OB'的期望EAAOBE_{AA'OB'}
EAAOB=14SO2BC+34SO1BC=116h0BCE_{AA'OB'}=\frac 1{4}S_{O_2BC}+\frac 3{4}S_{O_1BC}=\frac {11}{6}h_0|BC|

而P點落在四邊形AAOB,AOCB,BOCCAA'OB',A'OC'B,B'OC'C的概率是相同的。
所以
E=EAAOB=116h0BC=1118SABCE=E_{AA'OB'}=\frac {11}{6}h_0|BC|=\frac {11}{18}S_{ABC}

36E=22SABC36E=22S_{ABC}


注意,答案是long long類型,在算期望的過程中也要注意類型轉換!!

已知三點座標爲(x1,y1),(x2,y2),(x3,y3)(x_1,y_1),(x_2,y_2),(x_3,y_3),則三角形面積
S=(x2x1)(y3y1)(y2y1)(x3x1)S=|(x_2-x_1)*(y_3-y_1)-(y_2-y_1)*(x_3-x_1)|

注意(x2x1)(y3y1)(x_2-x_1)*(y_3-y_1)(y2y1)(x3x1)(y_2-y_1)*(x_3-x_1)都是long long類型


代碼如下:

#include <iostream>
#include <cmath>
using namespace std;
typedef long long ll;
int main(){
	int x1,x2,x3;
	int y1,y2,y3;
	while(~scanf("%d%d%d%d%d%d",&x1,&y1,&x2,&y2,&x3,&y3)){
		ll ans=(ll)(x2-x1)*(y3-y1)-(ll)(y2-y1)*(x3-x1);//面積與三點座標的公式求面積
		printf("%lld\n",(ll)abs(ans)*11);//答案爲22倍三角形面積
	}
	return 0;
}
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章