/* Author: Yiu Yu Ho This is a simple geometry problem. You need to know how to compute distance between 2 points, intersection point of 2 segments, and area of triangle. */ #include #include #include #include using namespace std; const double tol=1e-12; const int L=64; bool eq(double x,double y) { return abs(x-y) B.outputArea; } return A.perimeter > B.perimeter; } Pair inter(Pair a, Pair da, Pair b, Pair db) { double det, at; det = (da.x)*(-db.y)-(-db.x)*(da.y); at = (-db.y)*(b.x-a.x)+(db.x)*(b.y-a.y); at = at/det; return Pair(a.x+at*da.x,a.y+at*da.y); } bool allZero(double v[8]) { for(int i=0;i<8;++i) if(!eq(v[i],0)) return false; return true; } void solve() { double v[8]; int i,j,k; Triangle T[4]; Pair p; cout.precision(3); cout.setf(ios::fixed | ios::showpoint); for(i=0;i<8;++i) cin>>v[i]; while(!allZero(v)) { p=inter(Pair(v[0],v[1]),Pair(v[4]-v[0],v[5]-v[1]), Pair(v[2],v[3]),Pair(v[6]-v[2],v[7]-v[3])); k=0; i=6; for(j=0;j<8;j+=2) { T[k]=Triangle(Pair(v[i],v[i+1]),Pair(v[j],v[j+1]),p); ++k; i=j; } sort(T,T+4); for(i=0;i<4;++i) { if(i>0) cout<<' '; cout<<(T[i].outputArea+tol)<<' '<<(T[i].perimeter+tol); } cout<>v[i]; } } int main() { clock_t start = clock(); solve(); clock_t end = clock(); cerr<<"Time = "<<(double)(end-start)/(CLOCKS_PER_SEC)<<" sec"<