zoukankan      html  css  js  c++  java
  • An Easy Problem?!--

    没过  没过   啊啊啊  wa到死

    http://poj.org/problem?id=2826

    我的错误代码

    先不写了!!!!!!!

    #include<stdio.h>
    #include<math.h>
    #include<algorithm>
    #include<iostream>
    #include<string.h>
    #include<stdlib.h>
    #include<ctype.h>
    using namespace std;
    #define INF 0xfffffff
    #define ESP 1e-8
    
    #define memset(a,b) memset(a,b,sizeof(a))
    
    #define N 10
    
    struct Point
    {
        double x,y;
        Point(double x=0,double y=0):x(x),y(y){}
        Point operator - (const Point &t)const{
            return Point(x-t.x,y-t.y);
        }
        int operator * (const Point &temp)const{
            double t=(x*temp.y-y*temp.x);
            if(t>ESP)
                return 1;
            if(fabs(t)<ESP)
                return 0;
            return -1;
        }
    }t;
    
    struct node
    {
        Point A,B;
        node(Point A=0,Point B=0):A(A),B(B){}
    };
    
    int jiao(node a,node b)
    {
        int k1=(b.A-a.A)*(a.B-a.A)+(b.B-a.A)*(b.B-a.A);
        int k2=(a.A-b.A)*(b.B-b.A)+(a.B-b.A)*(b.B-b.A);
        if(k1==2 || k2==2)
            return false;
        return true;
    }
    
    int gongxian(node a,node b)
    {
        int k1=(b.A-a.A)*(a.B-a.A);
        int k2=(b.B-a.A)*(b.B-a.A);
        if(k1==0 && k2==0)
            return true;
        return false;
    }
    
    int fugai(double x1,double x2,double y1,double y2)
    {
        Point p,q;
        p=Point(x1,y1);
        q=Point(x2,y2);
        int k1=(p-t)*(q-t);
        int k2=(q-t)*(p-t);
        if(t.x<=x1)
        {
            if(x1>=x2 && y1>y2 && (k2==1 || k2==0))
                return true;
            else if(x2>=x1 && y2>y1 && (k1==1 || k1==0))
                return true;
        }
        else if(t.x>=x1)
        {
            if(x1<=x2 && y1>y2 && (k2==-1 || k2==0))
                return true;
            else if(x2<=x1 && y2>y1 && (k1==-1 || k1==0))
                return true;
        }
        return false;
    }
    Point line(Point u1,Point u2,Point v1,Point v2)///求交点模板
    {
        Point ret=u1;
        double t=((u1.x-v1.x)*(v1.y-v2.y)-(u1.y-v1.y)*(v1.x-v2.x))/((u1.x-u2.x)*(v1.y-v2.y)-(u1.y-u2.y)*(v1.x-v2.x));
    
        ret.x+=(u2.x-u1.x)*t;
        ret.y+=(u2.y-u1.y)*t;
    
        return ret;
    }
    
    int main()
    {
        int T;
        scanf("%d",&T);
        while(T--)
        {
            double ans=0.00;
            node a[N];
            Point p[N];
            memset(a,0);
            memset(p,0);
            double x1,x2,x3,x4,y1,y2,y3,y4;
            scanf("%lf %lf %lf %lf",&x1,&y1,&x2,&y2);
            scanf("%lf %lf %lf %lf",&x3,&y3,&x4,&y4);
            if(y1<y2)
            {
                swap(x1,x2);
                swap(y1,y2);
            }
            if(y3<y4)
            {
                swap(x3,x4);
                swap(y3,y4);
            }
            p[1]=Point(x1,y1);
            p[2]=Point(x2,y2);
            p[3]=Point(x3,y3);
            p[4]=Point(x4,y4);
            a[1]=node(Point(x1,y1),Point(x2,y2));
            a[2]=node(Point(x3,y3),Point(x4,y4));
            ///判断是否与x轴平行
            if(fabs(y1-y2)<ESP || fabs(y3-y4)<ESP)
            {
                printf("%.2f
    ",ans+ESP);
                continue;
            }
            ///判断相交
            if(!jiao(a[1],a[2]))
            {
                printf("%.2f
    ",ans+ESP);
                continue;
            }
    
            ///判断共线
            if(gongxian(a[1],a[2]))
            {
                printf("%.2f
    ",ans+ESP);
                continue;
            }
    
            ///判断覆盖
            t=line(p[1],p[2],p[3],p[4]);
            if(fugai(x1,x3,y1,y3))
            {
                printf("%.2f
    ",ans+ESP);
                continue;
            }
            else
            {
                double y=min(y1,y3);
                double xx1=(x2-x1)*(y-y1)/(y2-y1)+x1;
                double xx2=(x4-x3)*(y-y3)/(y4-y3)+x3;
    
                double S=fabs((y-t.y)*(xx2-t.x)-(xx1-t.x)*(y-t.y))/2.0;
                printf("%.2f
    ",S+ESP);
            }
        }
        return 0;
    }
    
  • 相关阅读:
    js 作用域
    js 实现二级联动
    JavaScript 基础(四)
    JavaScript 基础(三)
    数据库事务的基本概念
    二进制安装 kubernetes 1.12(五)
    二进制安装 kubernetes 1.12(四)
    二进制安装 kubernetes 1.12(三)
    二进制安装 kubernetes 1.12(二)
    Centos 7.x 安装 Docker-ce
  • 原文地址:https://www.cnblogs.com/linliu/p/5473039.html
Copyright © 2011-2022 走看看