您的位置:首页 > 其它

POJ 1269 Intersecting Lines

2016-01-22 09:28 302 查看
简单细节题。输出的时候%.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\n");
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\n");continue;}
else
{
if(line1.a*line2.b==line2.a*line1.b) {printf("NONE\n");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\n",ansX,ansY);
}
}
}
printf("END OF OUTPUT\n");
return 0;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: