原题链接:http://acm.hdu.edu.cn/showproblem.php?pid=1086
题目大意:有n条线段,请输出交点的个数。如果有多条线段相交一点,你应当重复计数。(由示例可以看出,交点为一条线断的端点的非规范相交也符合题意)
解题思路:本题不需要用向量做,太麻烦了。直接用高中解析几何知识做,如果两点在直线两侧,带入直线方程,所得结果异号。即相互跨过,特殊情况(交点为其中一条线段的端点的也包含在内,注意“相互”二字)
代码如下:
#include<stdio.h>
#include<string.h>
#include<math.h>
typedef struct segment
{
double s1,e1,s2,e2;
}segment;//定义线段
segment a[105];
/*判断一条线段的两端端点是否在另一条的异侧(即跨过另一条线段),端点相交的非规范相交也满足题意*/
int