其实这题可以按部就班地来算的,可是我总是先把它当数学题算,可以推出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\n",int(ans+0.5));
19     }
20     return 0;
21 }