样例过了但没分
查看原帖
样例过了但没分
428358
Grisses楼主2022/5/14 16:56
#include<bits/stdc++.h>
#define db double
using namespace std;
int T,a,b,c,d;
db ans;
const db eps=1e-7;
struct node{
	db x,y;
	node(){}
	node(db _x,db _y){x=_x,y=_y;}
	bool operator<(const node &t)const{return y<t.y||(y==t.y&&x<t.x);}
	node operator-(node &t){return node(x-t.x,y-t.y);}
	bool operator==(const node &t)const{return x==t.x&&y==t.y;}
};
db CPr(node A,node B){return A.x*B.y-A.y*B.x;}
db CPr(node A,node B,node C){return CPr(B-A,C-A);}
struct edge{
	node start,end;
	db angle;
	edge(){}
	edge(node A,node B){
		start=A,end=B;
		angle=atan2((B-A).y,(B-A).x);
	}
	bool operator<(const edge &t)const{
		if(fabs(angle-t.angle)<=eps)return CPr(start,t.start,t.end)>0;
		return angle<t.angle;
	}
}A,B;
db S1,S2;
node getnode(edge A,edge B){
	S1=CPr(A.start,B.end,A.end);
	S2=CPr(A.start,B.start,A.end);
	return node((S1*B.start.x-S2*B.end.x)/(S1-S2),(S1*B.start.y-S2*B.end.y)/(S1-S2));
}
signed main()
{
	puts("INTERSECTING LINES OUTPUT");
	scanf("%d",&T);
	while(T--){
		scanf("%d%d%d%d",&a,&b,&c,&d);
		A=edge(node(a,b),node(c,d));
		scanf("%d%d%d%d",&a,&b,&c,&d);
		B=edge(node(a,b),node(c,d));
		if(CPr(A.start-A.end,B.start-B.end)==0){
			if(CPr(A.start,B.end,B.start)==0)puts("LINE");
			else puts("NONE");
		}
		else printf("POINT %.2lf %.2lf\n",getnode(A,B).x,getnode(A,B).y);
	}
	printf("END OF OUTPUT");
	return 0;
}
2022/5/14 16:56
加载中...