标签:points 1.0 ble cto .com esc accept vector ref
Time Limit: 1000MS | Memory Limit: 10000K | |
Total Submissions: 16311 | Accepted: 7040 |
Description
Input
Output
Sample Input
5 0 0 4 4 0 4 4 0 5 0 7 6 1 0 2 3 5 0 7 6 3 -6 4 -3 2 0 2 27 1 5 18 5 0 3 4 0 1 2 2 5
Sample Output
INTERSECTING LINES OUTPUT POINT 2.00 2.00 NONE LINE POINT 2.00 5.00 POINT 1.07 2.20 END OF OUTPUT
题解:
详见大佬的博客
#include<iostream> #include<cstdio> #include<cstring> #include<cstdlib> #include<cmath> #include<algorithm> using namespace std; int n; double xx,yy; struct Vector { double x,y; Vector(){} Vector(double xx,double yy){x=xx;y=yy;} Vector operator+(Vector b) { Vector ans; ans.x=x+b.x;ans.y=y+b.y; return ans; } Vector operator-(Vector b) { Vector ans; ans.x=x-b.x;ans.y=y-b.y; return ans; } double operator*(Vector b) { return x*b.y-b.x*y; } double operator^(Vector b) { return x*b.x+y*b.y; } }; struct node { Vector a,b; }s,t; int main() { int i,j; scanf("%d",&n); printf("INTERSECTING LINES OUTPUT\n"); for(i=1;i<=n;i++) { scanf("%lf%lf%lf%lf%lf%lf%lf%lf",&s.a.x,&s.a.y,&s.b.x,&s.b.y,&t.a.x,&t.a.y,&t.b.x,&t.b.y); if(s.a.x==s.b.x||t.a.x==t.b.x) { if(s.a.x-s.b.x==t.a.x-t.b.x) { if(s.a.x==t.a.x)printf("LINE\n"); else printf("NONE\n"); } else { if(s.a.x-s.b.x==0) { printf("POINT %.2lf %.2lf\n",s.a.x,(s.a.x-t.a.x)*((t.b.y-t.a.y)/(t.b.x-t.a.x))+t.a.y); } else { printf("POINT %.2lf %.2lf\n",t.a.x,(t.a.x-s.a.x)*((s.b.y-s.a.y)/(s.b.x-s.a.x))+s.a.y); } } continue; } if((s.b.y-s.a.y)/(s.b.x-s.a.x)!=(t.b.y-t.a.y)/(t.b.x-t.a.x)) { double tmp=fabs((s.a-t.a)*(t.a-t.b)); tmp=tmp/(tmp+fabs((s.b-t.a)*(t.a-t.b))); xx=(s.b.x-s.a.x)*tmp+s.a.x;yy=(s.a.y-s.b.y)*(1-tmp)+s.b.y; printf("POINT %.2lf %.2lf\n",xx,yy); } else { if((s.a-s.b)*(t.a-s.b)==0)printf("LINE\n"); else printf("NONE\n"); } } printf("END OF OUTPUT\n"); return 0; }
标签:points 1.0 ble cto .com esc accept vector ref
原文地址:http://www.cnblogs.com/huangdalaofighting/p/7270723.html