问题 C: 线段交
·
#include <iostream>
#include <cstdio>
#include <cstring>
#include <cmath>
#include <algorithm>
#define INF 0x3f3f3f3f
using namespace std;
const int maxn = 105;
struct Point
{
double x,y;
} line[maxn][2];
bool judge(Point &a,Point &b,Point &c,Point &d)
{
if(!(min(a.x,b.x)<=max(c.x,d.x) && min(c.y,d.y)<=max(a.y,b.y)&&min(c.x,d.x)<=max(a.x,b.x) && min(a.y,b.y)<=max(c.y,d.y)))
return false;
double u,v,w,z;
u=(c.x-a.x)*(b.y-a.y)-(b.x-a.x)*(c.y-a.y);
v=(d.x-a.x)*(b.y-a.y)-(b.x-a.x)*(d.y-a.y);
w=(a.x-c.x)*(d.y-c.y)-(d.x-c.x)*(a.y-c.y);
z=(b.x-c.x)*(d.y-c.y)-(d.x-c.x)*(b.y-c.y);
return (u*v<=0.00000001 && w*z<=0.00000001);
}
int main()
{
int n;
scanf("%d",&n);
bool flag = true;
for(int i = 0; i < n; i ++)
{
scanf("%lf%lf%lf%lf",&line[i][0].x,&line[i][0].y,&line[i][1].x,&line[i][1].y);
}
int cnt=0;
for(int i = 0; i < n; i ++)
for(int j = i+1; j < n; j ++)
{
if(judge(line[i][0],line[i][1],line[j][0],line[j][1]))
{
cnt++;
}
}
printf("%d\n",cnt);
return 0;
}
推荐内容
更多推荐
相关推荐
查看更多
HowToCook

程序员在家做饭方法指南。Programmer's guide about how to cook at home (Chinese only).
public-apis

这个项目收集了大量公开可用的API接口,适合开发者查找和利用各类公开API来快速构建应用程序或获取所需数据,覆盖范围广泛,从社交、新闻到天气、地图等各种领域。
hello-algo

《Hello 算法》:动画图解、一键运行的数据结构与算法教程,支持 Java, C++, Python, Go, JS, TS, C#, Swift, Rust, Dart, Zig 等语言。
所有评论(0)