标签:opera tla cstring points should time air names other
Time Limit: 1000MS | Memory Limit: 10000K | |
Total Submissions: 15145 | Accepted: 6640 |
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
Source
#include <iostream> #include <cstdio> #include <cstring> #include <algorithm> #include <cmath> #include <vector> using namespace std; typedef long long ll; const double eps=1e-8; inline int read(){ char c=getchar();int x=0,f=1; while(c<‘0‘||c>‘9‘){if(c==‘-‘)f=-1; c=getchar();} while(c>=‘0‘&&c<=‘9‘){x=x*10+c-‘0‘; c=getchar();} return x*f; } inline int sgn(double x){ if(abs(x)<eps) return 0; else return x<0?-1:1; } struct Vector{ double x,y; Vector(double a=0,double b=0):x(a),y(b){} bool operator <(const Vector &a)const{ return x<a.x||(x==a.x&&y<a.y); } void print(){ printf("%lf %lf\n",x,y); } }; typedef Vector Point; Vector operator +(Vector a,Vector b){return Vector(a.x+b.x,a.y+b.y);} Vector operator -(Vector a,Vector b){return Vector(a.x-b.x,a.y-b.y);} Vector operator *(Vector a,double b){return Vector(a.x*b,a.y*b);} Vector operator /(Vector a,double b){return Vector(a.x/b,a.y/b);} bool operator ==(Vector a,Vector b){return sgn(a.x-b.x)==0&&sgn(a.y-b.y)==0;} double Cross(Vector a,Vector b){ return a.x*b.y-a.y*b.x; } double Dot(Vector a,Vector b){ return a.x*b.x+a.y*b.y; } double DisPP(Point a,Point b){ Point t=a-b; return sqrt(t.x*t.x+t.y*t.y); } struct Line{ Point s,t; Line(){} Line(Point p,Point v):s(p),t(v){} }; bool isLSI(Line l1,Line l2){ Vector v=l1.t-l1.s,u=l2.s-l1.s,w=l2.t-l1.s; return sgn(Cross(v,u))!=sgn(Cross(v,w)); } bool isSSI(Line l1,Line l2){ return isLSI(l1,l2)&&isLSI(l2,l1); } Point LI(Line a,Line b){ Vector v=a.s-b.s,v1=a.t-a.s,v2=b.t-b.s; double t=Cross(v2,v)/Cross(v1,v2); return a.s+v1*t; } double x,y,x2,y2; Line l1,l2; void solve(){ if(sgn(Cross(l1.t-l1.s,l2.t-l2.s))==0){ Vector v=l1.t-l1.s,u=l2.s-l1.s,w=l2.t-l1.s; if(sgn(Cross(v,u))==0&&sgn(Cross(v,w))==0) puts("LINE"); else puts("NONE"); }else{ Point p=LI(l1,l2); printf("POINT %.2f %.2f\n",p.x,p.y); } } int main(int argc, const char * argv[]) { int T=read(); puts("INTERSECTING LINES OUTPUT"); while(T--){ scanf("%lf%lf%lf%lf",&x,&y,&x2,&y2); l1=Line(Point(x,y),Point(x2,y2)); scanf("%lf%lf%lf%lf",&x,&y,&x2,&y2); l2=Line(Point(x,y),Point(x2,y2)); solve(); } puts("END OF OUTPUT"); return 0; }
POJ1269 Intersecting Lines[线段相交 交点]
标签:opera tla cstring points should time air names other
原文地址:http://www.cnblogs.com/candy99/p/6354159.html