Online Judge | Problem Set | Authors | Online Contests | User | ||||||
---|---|---|---|---|---|---|---|---|---|---|
Web Board Home Page F.A.Qs Statistical Charts | Current Contest Past Contests Scheduled Contests Award Contest |
不知道那里错拉!高手帮忙#include<stdio.h> #include<math.h> void dis(double x1,double y1,double x2,double y2,double x3,double y3,double x4,double y4,double &x,double &y) { double k1,k2,b1,b2; k1=(y2-y1)/(x2-x1);b1=y1-k1*x1; k2=(y4-y3)/(x4-x3);b2=y3-k2*x3; x=(b1-b2)/(k2-k1);y=k1*x+b1; } double fun(double x1,double y1,double x2,double y2) { double sum; sum=sqrt((x1-x2)*(x1-x2)+(y1-y2)*(y1-y2)); return sum; } int main() { int i,n,h,x[1003],y[1003]; double sum,tx,ty,k1,k2; while(1) { scanf("%d%d",&n,&h);if(n+h==0) break; for(i=1;i<=n;i++) scanf("%d%d",&x[i],&y[i]); sum=fun(x[1],y[1],x[2],y[2]); //printf("%.2lf\n",sum); for(i=2;i+2<=n;i+=2) { dis(0,h,x[i],y[i],x[i+1],y[i+1],x[i+2],y[i+2],tx,ty); printf("%.2lf %.2lf\n",tx,ty); if(tx<x[i+1]&&ty<y[i+1]) {sum+=fun(x[i],y[i],x[i+1],y[i+1]);sum+=fun(x[i+1],y[i+1],x[i+2],y[i+2]);} else if(tx>=x[i+1]&&tx<x[i+2]&&ty>=y[i+1]&&ty<=y[i+2]) {sum+=fun(tx,ty,x[i+2],y[i+2]);} // printf("%.2lf\n",sum); } k1=(y[n-1]-h)/(double)(x[n-1]); k2=(y[n]-h)/(double)(x[n]); if(k1<0&&k2<0) { if(k1<k2) sum+=fun(x[n-1],y[n-1],x[n],y[n]); } else if(k1>0&&k2>0) { if(k1>k2) sum+=fun(x[n-1],y[n-1],x[n],y[n]); } printf("%.2lf\n",sum); } return 0; } Followed by: Post your reply here: |
All Rights Reserved 2003-2013 Ying Fuchen,Xu Pengcheng,Xie Di
Any problem, Please Contact Administrator