标签:roc sam problems 线段 inpu space limit any ted
Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others)
1 inline double CrossProduct(node a, node b, node c){ 2 return (b.x - a.x) * (c.y - a.y) - (b.y - a.y) * (c.x - a.x); 3 } 4 //Calculate the crossproduct 5 6 7 inline bool SegX(node p1, node p2, node p3, node p4){ 8 double d1 = CrossProduct(p3, p4, p1); 9 double d2 = CrossProduct(p3, p4, p2); 10 double d3 = CrossProduct(p1, p2, p3); 11 double d4 = CrossProduct(p1, p2, p4); 12 return (d1 * d2 <= 0 && d3 * d4 <= 0); 13 } 14 //Judge whether the line segments intersact
1 #include <bits/stdc++.h> 2 3 using namespace std; 4 5 struct node{ 6 double x, y; 7 } pa[100010], pb[100010]; 8 9 int n, num; 10 11 inline double CrossProduct(node a, node b, node c){ 12 return (b.x - a.x) * (c.y - a.y) - (b.y - a.y) * (c.x - a.x); 13 } 14 15 16 inline bool SegX(node p1, node p2, node p3, node p4){ 17 double d1 = CrossProduct(p3, p4, p1); 18 double d2 = CrossProduct(p3, p4, p2); 19 double d3 = CrossProduct(p1, p2, p3); 20 double d4 = CrossProduct(p1, p2, p4); 21 return (d1 * d2 <= 0 && d3 * d4 <= 0); 22 } 23 24 int main(){ 25 26 while (~scanf("%d", &n), n){ 27 num = 0; 28 for (int i = 1; i <= n; ++i) scanf("%lf%lf%lf%lf", &pa[i].x, &pa[i].y, &pb[i].x, &pb[i].y); 29 for (int i = 1; i <= n - 1; ++i) 30 for (int j = i + 1; j <= n; ++j) 31 if (SegX(pa[i], pb[i], pa[j], pb[j])) ++num; 32 printf("%d\n", num); 33 } 34 35 return 0; 36 37 }
HDU1086 You can Solve a Geometry Problem too(计算几何)
标签:roc sam problems 线段 inpu space limit any ted
原文地址:http://www.cnblogs.com/cxhscst2/p/6399563.html