杭电acm1086

来源:互联网 发布:java https请求带证书 编辑:程序博客网 时间:2024/05/19 21:42

S(abc) = (|ab|*|ac|*sinΘ) / 2 = |ab| × |ac| / 2//叉积

#include <stdio.h>struct point {double x1, y1, x2, y2;}buf[101];int judge(int i, int j) {//叉积int f1=0,f2=0;      double acd=(buf[i].x1-buf[j].x1)*(buf[i].y1-buf[i].y2)-(buf[i].x1-buf[i].x2)*(buf[i].y1-buf[j].y1);      double bcd=(buf[i].x1-buf[j].x2)*(buf[i].y1-buf[i].y2)-(buf[i].x1-buf[i].x2)*(buf[i].y1-buf[j].y2);      if(acd*bcd<=0)      f1=1;      double cab=(buf[j].x1-buf[i].x1)*(buf[j].y1-buf[j].y2)-(buf[j].x1-buf[j].x2)*(buf[j].y1-buf[i].y1);      double dab=(buf[j].x1-buf[i].x2)*(buf[j].y1-buf[j].y2)-(buf[j].x1-buf[j].x2)*(buf[j].y1-buf[i].y2);      if(cab*dab<=0)      f2=1;      if((f1+f2)==2)      return 1;            return 0;  }int main() {int n, i, j, ans;while(~scanf("%d", &n) && n) {ans = 0;for(i=0; i<n; i++)scanf("%lf%lf%lf%lf", &buf[i].x1, &buf[i].y1,&buf[i].x2, &buf[i].y2);for(i=0; i<n-1; i++)for(j=i+1; j<n; j++)if(judge(i, j))ans ++;printf("%d\n", ans);}return 0;}


0 0
原创粉丝点击