📄 1086.cpp
字号:
#include<iostream>
using namespace std;
double min(double a,double b){
return a<b?a:b;
}
double max(double a,double b){
return a>b?a:b;
}
double strait(double x1,double y1,double x2,double y2,double x3,double y3){
return (x3-x1)*(y2-y1)-(x2-x1)*(y3-y1);
}
bool onornot(double x1,double y1,double x2,double y2,double x3,double y3){
return x3>=min(x1,x2)&&x3<=max(x1,x2)&&y3>=min(y1,y2)&&y3<=max(y1,y2);
}
bool judge(double x1,double y1,double x2,double y2,double x3,double y3,double x4,double y4){
double a1=strait(x1,y1,x2,y2,x3,y3);
double a2=strait(x1,y1,x2,y2,x4,y4);
double b1=strait(x3,y3,x4,y4,x1,y1);
double b2=strait(x3,y3,x4,y4,x2,y2);
if(a1*a2<0&&b1*b2<0)
return true;
if(a1==0)
return onornot(x1,y1,x2,y2,x3,y3);
if(a2==0)
return onornot(x1,y1,x2,y2,x4,y4);
if(b1==0)
return onornot(x3,y3,x4,y4,x1,y1);
if(b2==0)
return onornot(x3,y3,x4,y4,x2,y2);
return false;
}
void main()
{
int n,i,j,sum;
double x1[100],y1[100],x2[100],y2[100];
while(cin>>n,n){
sum=0;
for(i=0;i<n;i++)
cin>>x1[i]>>y1[i]>>x2[i]>>y2[i];
for(i=0;i<n-1;i++)
for(j=i+1;j<n;j++)
sum+=judge(x1[i],y1[i],x2[i],y2[i],x1[j],y1[j],x2[j],y2[j])?1:0;
cout<<sum<<endl;
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -