Online JudgeProblem SetAuthorsOnline ContestsUser
Web Board
Home Page
F.A.Qs
Statistical Charts
Problems
Submit Problem
Online Status
Prob.ID:
Register
Update your info
Authors ranklist
Current Contest
Past Contests
Scheduled Contests
Award Contest
User ID:
Password:
  Register

为什么是wrong answer。。

Posted by holypig at 2009-05-28 02:22:19 on Problem 3711
郁闷

#include<iostream>
#include<cstdio>
#include<cmath>
#include<vector>
using namespace std;

class Side;
//void Side::length();
class Point
{
public:
	Point(double a,double b):x(a),y(b) {}
	//friend void Side::length();
	friend Side;
private:
	double x,y;
};


class Side
{
public:
	Side(double,double,double,double);
	double coe1(),coe2(),coe3();
	double length();
private:
	Point X,Y;
};

Side::Side(double a,double b,double c,double d):X(a,b),Y(c,d){}

double Side::length() {return sqrt(pow((X.x-Y.x),2)+pow((X.y-Y.y),2));}
double Side::coe1() {return X.y-Y.y;}
double Side::coe2() {return Y.x-X.x;}
double Side::coe3() {return X.x*(Y.y-X.y)-X.y*(Y.x-X.x);}


class Triangle
{   
public:
	Triangle(double a,double b,double c,double d,double e,double f):X(a,b),Y(c,d),Z(e,f), XY(a,b,c,d),YZ(c,d,e,f),ZX(e,f,a,b) {}
	double area();
	double circum();
private:
	Point X,Y,Z;
	Side XY,YZ,ZX;
	//double AB,BC,CA;
};

double Triangle::circum() {return XY.length()+YZ.length()+ZX.length();}
double Triangle::area() {return sqrt(0.5*circum()*(0.5*circum()-XY.length())*(0.5*circum()-YZ.length())*(0.5*circum()-ZX.length()));}


void solve(double A1,double B1,double C1,double A2,double B2,double C2 ,double & x, double & y)
{//cout<<"x="<<(B2*C1-B1*C2)/(A1*B2-A2*B1)<<"  y="<<(A2*C1-A1*C2)/(A2*B1-A1*B2)<<endl;
x=(B2*C1-B1*C2)/(A1*B2-A2*B1);y=(A2*C1-A1*C2)/(A2*B1-A1*B2);
}
double max(double a,double b, double c)
{ double x=0;
  x=a>b?a:b;
  x=x>c?x:c;
  return x;
}
double min(double a,double b,double c)
{ double x=a<b?a:b;
  x=x<c?x:c;
  return x;
}



int main()
{ double x1,y1,x2,y2,x3,y3,h;
  //cin>>x1>>y1>>x2>>y2>>x3>>y3>>h;

  vector <double> X1,Y1,X2,Y2,X3,Y3,H;
  while(cin>>x1>>y1>>x2>>y2>>x3>>y3>>h && x1!=EOF)
  {   X1.push_back(x1);
      Y1.push_back(y1);
	  X2.push_back(x2);
	  Y2.push_back(y2);
	  X3.push_back(x3);
	  Y3.push_back(y3);
  }
  for(vector<double>::size_type i=0;i<X1.size();i++)
  {
  x1=X1[i];y1=Y1[i];x2=X2[i];y2=Y2[i];x3=X3[i];y3=Y3[i];
  Point A(x1,y1),B(x2,y2), C(x3,y3);
  Side AB(x1,y1,x2,y2),BC(x2,y2,x3,y3),CA(x3,y3,x1,y1);
  Triangle ABC(x1,y1,x2,y2,x3,y3);

  double A1,B1,C1,A2,B2,C2;
  double x=0,y=0,Qx,Qy;

  double S=ABC.area();
  double d=2*S/(pow(AB.length(),2)+pow(BC.length(),2)+pow(CA.length(),2));

  A1=AB.coe1()/sqrt(pow(AB.coe1(),2)+pow(AB.coe2(),2));
  B1=AB.coe2()/sqrt(pow(AB.coe1(),2)+pow(AB.coe2(),2));
  C1=AB.coe3()/sqrt(pow(AB.coe1(),2)+pow(AB.coe2(),2));

  A2=BC.coe1()/sqrt(pow(BC.coe1(),2)+pow(BC.coe2(),2));
  B2=BC.coe2()/sqrt(pow(BC.coe1(),2)+pow(BC.coe2(),2));
  C2=BC.coe3()/sqrt(pow(BC.coe1(),2)+pow(BC.coe2(),2));
  
  double maxX=max(x1,x2,x3);
  double minX=min(x1,x2,x3);
  double maxY=max(y1,y2,y3);
  double minY=min(y1,y2,y3);

  solve(A1,B1,d*AB.length()-C1,A2,B2,d*BC.length()-C2,x,y);  if(x<=maxX&&x>=minX && y<=maxY&&y>=minY) {Qx=x;Qy=y;}
  solve(A1,B1,-d*AB.length()-C1,A2,B2,d*BC.length()-C2,x,y);     if(x<=maxX&&x>=minX && y<=maxY&&y>=minY) {Qx=x;Qy=y;}
  solve(A1,B1,-d*AB.length()-C1,A2,B2,-d*BC.length()-C2,x,y);    if(x<=maxX&&x>=minX && y<=maxY&&y>=minY) {Qx=x;Qy=y;}
  solve(A1,B1,d*AB.length()-C1,A2,B2,-d*BC.length()-C2,x,y);     if(x<=maxX&&x>=minX && y<=maxY&&y>=minY) {Qx=x;Qy=y;}

  
   printf("%.2f",Qx);
  printf("%.2f\n",Qy);
  }
  return 0;
}


Followed by:

Post your reply here:
User ID:
Password:
Title:

Content:

Home Page   Go Back  To top


All Rights Reserved 2003-2013 Ying Fuchen,Xu Pengcheng,Xie Di
Any problem, Please Contact Administrator