其实这题可以按部就班地来算的,可是我总是先把它当数学题算,可以推出Spqr= 1/7 Sabc。证明如下:
连接DE,设Sabc=1,则Sabe=2/3,Sabd=1/3,Sbde=1/9,Sade=4/9。Sabp:Sdbp=Sape:Sdpe=AP:PD=Sabe:Sdbe=2/3:1/9=6:1;同理BP:BE=3:4。如此重复3次可得:DP:PR:RA=1:3:3。所以Sabp=1/3*6/7=2/7,同理bulabula,所以Spqr=1/7。
顺便说一句,多谢陈老湿整理的模板。
1 #include <cstdio> 2 typedef struct Point{ 3 double x, y; 4 Point(double _x = 0, double _y = 0):x(_x), y(_y){} 5 Point operator-(const Point &P)const{ return Point(x-P.x, y-P.y); } 6 }Point, Myvec; 7 double Cross(const Myvec &A, const Myvec &B){ return A.x*B.y-A.y*B.x; } 8 double Area2(const Point &A, const Point &B, const Point &C){ return Cross(B-A, C-A); } 9 int main(){ 10 int T; 11 Point A,B,C; 12 scanf("%d",&T); 13 while(T--){ 14 scanf("%lf%lf%lf%lf%lf%lf",&A.x,&A.y,&B.x,&B.y,&C.x,&C.y); 15 double s = Area2(A,B,C)/2; 16 double t = s/7.0; 17 double ans = t>0 ?t :-t; 18 printf("%d ",int(ans+0.5)); 19 } 20 return 0; 21 }