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

Re:2826 到底是怎么回事 少考虑了什么条件。。。。。。。。。。。。。。。。!!!!HELP

Posted by ddna at 2006-05-14 11:39:23
In Reply To:2826 到底是怎么回事 少考虑了什么条件。。。。。。。。。。。。。。。。!!!!HELP Posted by:Lodestar at 2006-04-28 22:56:01
我测试通过了,自己写的一些特殊情况的测试也通过了,还是wr,麻烦给看一下各位。我写的是任何情况下的两条线段都可以计算的,包含了两块板相同长度的情况啊!
#include<stdio.h>
#include<math.h>

int main(){

   int x1,y1,x2,y2,x3,y3,x4,y4,t;
   int i,N;

   double k1=0.0,k2=0.0;
   double xc=0.0,yc=0.0,x0=0.0,y0=0.0;

   double *rain=new double[N];

   scanf("%d",&N);

   for(i=0;i<N;i++){

      scanf("%d %d %d %d\n%d %d %d %d",&x1,&y1,&x2,&y2,&x3,&y3,&x4,&y4);

      if(y1<y2){t=y1;y1=y2;y2=t;t=x1;x1=x2;x2=t;}//固定使(x1,y1)在上面。
      if(y3<y4){t=y3;y3=y4;y4=t;t=x3;x3=x4;x4=t;}//固定使(x3,y3)在上面。

      if(y1==y2||y3==y4)rain[i]=0.0;//有块板水平则一定为0.00
      else if(x1==x2&&x3==x4)rain[i]=0.0;//两块板同时竖直也一定为0.00
      else if(x1==x2&&x3!=x4){//第一块板竖直的情况,因为没斜率故单独算
	     k2=(y3-y4+0.0)/(x3-x4+0.0);
	     x0=x1;
	     y0=k2*(x0-x3)+y3;
	     if(y3<=y1){
		  xc=x1;
		  yc=y3;
		  rain[i]=fabs((yc-y0)*(xc-x3)*0.5);
	    }
	     else {
		  yc=y1;
		  xc=(yc-y3)/k2+x3;
		  rain[i]=fabs((yc-y0)*(xc-x1)*0.5);
	   }
      }
      else if(x1!=x2&&x3==x4){//第二块板竖直的情况,因为没斜率故单独算
	     k1=(y1-y2+0.0)/(x1-x2+0.0);
	     x0=x3;
	     y0=k1*(x0-x1)+y1;
	     if(y3<=y1){
		  yc=y3;
		  xc=(yc-y1)/k1+x1;
		  rain[i]=fabs((yc-y0)*(x3-xc)*0.5);
	     }
	     else {
		  yc=y1;
		  xc=x3;
		  rain[i]=fabs((yc-y0)*(x1-xc)*0.5);
	     }

      }
      else if(x1!=x2&&x3!=x4){//两块板都不竖直的情况
	    k1=(y1-y2+0.0)/(x1-x2+0.0);
	    k2=(y3-y4+0.0)/(x3-x4+0.0);
		     if(fabs(k1-k2)<0.00001){//两块板平行
	       rain[i]=0.0;
	     }else{
	       x0=(y3-y1+k1*x1-k2*x3)/(k1-k2);
	       y0=k1*(x0-x1)+y1;
	       if(!(y2<=y0&&y0<=y1)||!(y4<=y0&&y0<=y3))
		 {//两块板虽然不平行,但不相交(因为是线段不是直线)
		   rain[i]=0.0;
		 } else{//通常情况
		       if(y3<=y1){
			yc=y3;
			xc=(yc-y1)/k1+x1;
			rain[i]=fabs((yc-y0)*(x3-xc)*0.5);
		       }else {
			yc=y1;
			xc=(yc-y3)/k2+x3;
			rain[i]=fabs((yc-y0)*(x1-xc)*0.5);
		       }
		     }
		}
	    }
 
   }
   for(i=0;i<N;i++){printf("%.2lf\n",rain[i]);}
      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