zoukankan      html  css  js  c++  java
  • POJ 1269 Intersecting Lines

    简单细节题。输出的时候%.2lf C++能过,G++过不了。改成%.2f G++才能过......

    #include<cstdio>
    #include<cstring>
    #include<cmath>
    #include<stack>
    #include<vector>
    #include<string>
    #include<iostream>
    #include<algorithm>
    using namespace std;
    
    
    struct J
    {
        int fz,fm;
        int zf;
    };
    vector<J>Q;
    
    struct Line
    {
        int a,b,c;
    }line1,line2;
    int T;
    int X1,Y1,X2,Y2,X3,Y3,X4,Y4;
    
    int gcd(int a, int b)
    {
        if (a%b==0) return b;
        return gcd(b,a%b);
    }
    
    int main()
    {
        scanf("%d",&T);
        printf("INTERSECTING LINES OUTPUT
    ");
        while(T--)
        {
            scanf("%d%d%d%d%d%d%d%d",&X1,&Y1,&X2,&Y2,&X3,&Y3,&X4,&Y4);
            Q.clear();
    
            line1.a=Y2-Y1;
            line1.b=X2-X1;
            line1.c=Y2*(X2-X1)-X2*(Y2-Y1);
    
            line2.a=Y4-Y3;
            line2.b=X4-X3;
            line2.c=Y4*(X4-X3)-X4*(Y4-Y3);
    
            bool fail=0;
            if(line1.a==0&&line2.a!=0) fail=1;
            if(line1.b==0&&line2.b!=0) fail=1;
            if(line1.c==0&&line2.c!=0) fail=1;
            if(line1.a!=0&&line2.a==0) fail=1;
            if(line1.b!=0&&line2.b==0) fail=1;
            if(line1.c!=0&&line2.c==0) fail=1;
            if(fail==0)
            {
                if(line1.a==0&&line2.a==0){}
                else {
                    int num=0,zf;
                    if(line1.a>0) num++;
                    if(line2.a>0) num++;
                    if(num%2==0) zf=1;
                    else zf=-1;
                    J r;
                    r.zf=zf;
                    r.fz=r.zf*abs(line1.a)/gcd(abs(line1.a),abs(line2.a));
                    r.fm=abs(line2.a)/gcd(abs(line1.a),abs(line2.a));
                    Q.push_back(r);
                }
    
                if(line1.b==0&&line2.b==0){}
                else {
                    int num=0,zf;
                    if(line1.b>0) num++;
                    if(line2.b>0) num++;
                    if(num%2==0) zf=1;
                    else zf=-1;
                    J r;
                    r.zf=zf;
                    r.fz=r.zf*abs(line1.b)/gcd(abs(line1.b),abs(line2.b));
                    r.fm=abs(line2.b)/gcd(abs(line1.b),abs(line2.b));
                    Q.push_back(r);
                }
    
                if(line1.c==0&&line2.c==0){}
                else {
                    int num=0,zf;
                    if(line1.b>0) num++;
                    if(line2.b>0) num++;
                    if(num%2==0) zf=1;
                    else zf=-1;
                    J r;
                    r.zf=zf;
                    r.fz=r.zf*abs(line1.c)/gcd(abs(line1.c),abs(line2.c));
                    r.fm=abs(line2.c)/gcd(abs(line1.c),abs(line2.c));
                    Q.push_back(r);
                }
                int biaozhunA=Q[0].fz;
                int biaozhunB=Q[0].fm;
                for(int i=0;i<Q.size();i++)
                    if(Q[i].fz!=biaozhunA||Q[i].fm!=biaozhunB) fail=1;
            }
            if(fail==0) {printf("LINE
    ");continue;}
            else
            {
                if(line1.a*line2.b==line2.a*line1.b) {printf("NONE
    ");continue;}
                else
                {
                    double ansX=1.0*(line1.b*line2.c-line2.b*line1.c)/(line1.a*line2.b-line2.a*line1.b);
                    double ansY=-1.0*(line2.a*line1.c-line1.a*line2.c)/(line1.a*line2.b-line2.a*line1.b);
                    printf("POINT %.2lf %.2lf
    ",ansX,ansY);
                }
            }
        }
        printf("END OF OUTPUT
    ");
        return 0;
    }
  • 相关阅读:
    Sublime Text安装Package Control
    HTTP,FTP,TCP,UDP及SOCKET
    Oracle数据库的导入导出
    C#.NET中数组、ArrayList和List三者的区别
    一道有趣的逻辑面试题(数独)
    C#常用命名空间
    C# Dictionary已知value获取对应的key
    C#记录程序耗时的方法
    有return语句情况下,try-catch-finally的执行顺序
    C# 拷贝数组的几种方法
  • 原文地址:https://www.cnblogs.com/zufezzt/p/5150259.html
Copyright © 2011-2022 走看看