UVA11437

来源:互联网 发布:编程三大结构 编辑:程序博客网 时间:2024/06/06 06:56

https://vjudge.net/problem/UVA-11437

#include <iostream>#include <cstdio>#include <cmath>using namespace std;struct Point{double x;double y;Point(double x = 0 , double y = 0): x(x),y(y) {};};Point operator + (const Point& A , const Point& B){return Point( A.x + B.x , A.y + B.y );}Point operator - (const Point& A , const Point& B){return Point( A.x - B.x , A.y - B.y );}Point operator * (const Point& A , double a){return Point( A.x * a , A.y * a );}Point operator / (const Point& A , double a){return Point( A.x / a , A.y / a );}double Cross( const Point& A , const Point& B ){return A.x * B.y - A.y * B.x;}bool operator == (const Point& A , const Point& B ){return A.x == B.x && A.y == B.y;}bool operator < ( const Point& A , const Point& B ){return A.x < B.x || ( A.x == B.x && A.y < B.y );}Point GetLineIntersection(Point P, Point v, Point Q, Point w) { //求交点    Point u = P - Q;    double t = Cross(w, u) / Cross(v, w);    return P + v * t;}int main(){int T;cin>>T;while( T-- ){Point A , B , C , D , E ,F;scanf("%lf%lf%lf%lf%lf%lf",&A.x,&A.y,&B.x,&B.y,&C.x,&C.y);Point CF = Point( ( B - C ) + ( A - B )*2.0/3 );Point AD = Point( ( A - B ) + ( B - C )*1.0/3 );Point BE = Point( ( B - C ) + ( C - A )*1.0/3 ); Point P = GetLineIntersection( B , BE , A , AD );Point Q = GetLineIntersection( B , BE , C , CF );Point R = GetLineIntersection( C , CF , A , AD );double res = fabs( Cross( Q - P , R - P ) );printf("%lld\n",( long long ) (res/2.0 + 0.5) );}return 0;}