hdu1086 You can Solve a Geometry Problem too
816 ワード
#include <stdio.h>
//(abXac)(abXad)<0 && (cdXca)(cdXcb)<0
struct segment
{
double x1,y1,x2,y2;
}seg[102];
int Judge(int i,int j)
{
double a,b,c,d,x,y,a1,b1;
a=seg[i].x1-seg[j].x1;
b=seg[i].y1-seg[j].y1;
a1=seg[i].x2-seg[j].x1;
b1=seg[i].y2-seg[j].y1;
c=seg[j].x2-seg[j].x1;
d=seg[j].y2-seg[j].y1;
x=a*d-b*c;
y=a1*d-b1*c;
if(x*y<=0)
return 1;
else
return 0;
}
int main()
{
int n,i,j,count;
while(scanf("%d",&n)&&n)
{
count=0;
for (i=1;i<=n;i++)
{
scanf("%lf %lf %lf %lf",&seg[i].x1,&seg[i].y1,&seg[i].x2,&seg[i].y2);
}
for (i=1;i<n;i++)
{
for(j=i+1;j<=n;j++)
if(Judge(i,j)&&Judge(j,i))
count++;
}
printf("%d
",count);
}
return 0;
}