zoukankan      html  css  js  c++  java
  • hdu1086(规范相交模版题)

    #include <iostream>
    #include <stdio.h>
    
    using namespace std;
    
    typedef struct node
    {
        double x;
        double y;
    }point;
    typedef struct ed
    {
        point a;
        point b;
        int is_top;
    }edge;
    edge e[100005];
    
    point make_e(point x,point y)
    {
        point a;
        a.x = x.x - y.x;
        a.y = x.y - y.y;
        return a;
    }
    
    double cha(point x,point y)
    {
        return x.x*y.y - y.x*x.y;
    }
    
    double cross(edge a,point c)
    {
        point e1,e2;
        e1 = make_e(a.a,c);
        e2 = make_e(a.a,a.b);
        return cha(e2,e1);
    }
    
    int main()
    {
        int n,i,j;
        while(scanf("%d",&n)&&n)
        {
            for(i = 0;i < n;i++)
            scanf("%lf %lf %lf %lf",&e[i].a.x,&e[i].a.y,&e[i].b.x,&e[i].b.y),e[i].is_top = 0;
            int count = 0;
            for(i = 0;i < n;i++)
            {
                for(j = i+1;j < n;j++)
                {
                    if(i != j)
                    {
                        if(cross(e[i],e[j].a)*cross(e[i],e[j].b) <= 0 && cross(e[j],e[i].a)*cross(e[j],e[i].b) <= 0)
                        count++;
                    }
                }
            }
                   printf("%d\n",count);
    
        }
        return 0;
    }

    pc代码

    #include<iostream>
    #include<cstdio>
    #include<cmath>
    #include<cstring>
    using namespace std;
    const int N=102;
    double eps=0.0000000001;
    
    struct node
    {
        double x,y;
    }sh[N],se[N];
    int n;
    
    double jud(node a,node b,node c)
    {
        return (b.x-a.x)*(c.y-a.y)-(b.y-a.y)*(c.x-a.x);
    }
    bool cross(int i,int j)
    {
        double k1=jud(sh[i],se[i],sh[j]);
        double k2=jud(sh[i],se[i],se[j]);
        double k3=jud(sh[j],se[j],sh[i]);
        double k4=jud(sh[j],se[j],se[i]);
        if(k1*k2<eps&&k3*k4<eps)return true;
        return false;
    }
    
    int main()
    {
        int i,j,k;
        while(cin>>n,n)
        {
            for(i=0;i<n;i++)
            {
                scanf("%lf %lf %lf %lf",&sh[i].x,&sh[i].y,&se[i].x,&se[i].y);
            }
            int ans=0;
            for(i=0;i<n-1;i++)
            {
                for(j=i+1;j<n;j++)
                {
                    if(cross(i,j))ans++;
                }
            }
            cout<<ans<<endl;
        }
        return 0;
    }
  • 相关阅读:
    start tag, end tag issues in IE7, particularly in xslt transformation
    用SandCastle为注释生成chm文档
    Firebug
    架构的重点
    Linux Shell常用技巧(十) 管道组合
    Linux JDK升级
    Linux Shell常用技巧(十二) Shell编程
    Packet Tracer 5.0实验(一) 交换机的基本配置与管理
    Linux Shell常用技巧(六) sort uniq tar split
    Linux Shell常用技巧(二) grep
  • 原文地址:https://www.cnblogs.com/0803yijia/p/2640220.html
Copyright © 2011-2022 走看看