Online Judge | Problem Set | Authors | Online Contests | User | ||||||
---|---|---|---|---|---|---|---|---|---|---|
Web Board Home Page F.A.Qs Statistical Charts | Current Contest Past Contests Scheduled Contests Award Contest |
5555555 WA得不能再WA了, 高人好心帮忙看看。。。谢啦!#include <iostream> #include <cmath> #include <iomanip> using namespace std; struct point { double x; double y; }; double area(double a, double b, double c) { double rtn; double s = (a + b + c) / 2; rtn = sqrt(s * (s - a) * (s - b) * (s - c)); return rtn; } int main() { double PI = 2 * asin(1); point p1, p2, p3, p4; point p0, p_tmp; double k; double a, b, c; double ans; double cita; int caseTime; cin >> caseTime; while (caseTime-- != 0) { cin >> p1.x >> p1.y; cin >> p2.x >> p2.y; cin >> p3.x >> p3.y; cin >> p4.x >> p4.y; if (p1.y < p2.y) { swap(p1, p2); } if (p3.y < p4.y) { swap(p3, p4); } if (p1.y == p2.y || p3.y == p4.y) { cout << "0.00" << endl; continue; } if (p1.x == p2.x && p3.x == p4.x) { cout << "0.00" << endl; continue; } if (p1.x == p2.x || p3.x == p4.x) { if (p3.x == p4.x) { swap(p1, p3); swap(p2, p4); } p0.y = (p4.y - p3.y) * (p2.x - p3.x) / (p4.x - p3.x) + p3.y; if (p0.y < p2.y && p0.y < p4.y) { cout << "0.00" << endl; } else { if (p1.y > p3.y) { ans = fabs(p3.x-p1.x) * fabs(p3.y-p0.y) / 2; } else { ans = fabs((p1.y - p3.y) * (p4.x - p3.x) / (p4.y - p3.y) + p3.x - p1.x) * fabs(p1.y-p0.y) / 2; } ans *= 100; // ans = ceil(ans); ans += 0.5; ans = int(ans) / 100; cout << setiosflags(ios::fixed) << setprecision(2) << ans << endl; } continue; } p0.x = ((p2.y - p1.y) / (p2.x - p1.x) * p1.x - p1.y - (p4.y - p3.y) / (p4.x - p3.x) * p3.x + p3.y) / ((p2.y - p1.y) / (p2.x - p1.x) - (p4.y - p3.y) / (p4.x - p3.x)); p0.y = ((p2.y - p1.y) / (p2.x - p1.x) * (p0.x - p1.x) + p1.y); if (p0.y < p2.y && p0.y < p4.y) { cout << "0.00" << endl; continue; } if (p1.y >= p3.y) { swap(p1, p3); swap(p2, p4); } a = sqrt((p1.x - p0.x) * (p1.x - p0.x) + (p1.y - p0.y) * (p1.y - p0.y)); p_tmp.x = (p4.x - p3.x) / (p4.y - p3.y) * (p1.y - p3.y) + p3.x; b =sqrt((p_tmp.x - p0.x) * (p_tmp.x - p0.x) + (p1.y - p0.y) * (p1.y - p0.y)); c = fabs((p_tmp.x - p1.x)); ans = area(a, b, c); ans *= 100; ans += 0.5; // ans = ceil(ans); ans = int(ans) / 100; cout << setiosflags(ios::fixed) << setprecision(2) << ans << endl; } return 0; } Followed by: Post your reply here: |
All Rights Reserved 2003-2013 Ying Fuchen,Xu Pengcheng,Xie Di
Any problem, Please Contact Administrator