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 |
⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯In Reply To:有硕士博士吗,同等学力的也进来帮帮我,为什么提交总是Accepted? Posted by:JiaJunpeng at 2011-06-16 16:55:19 > #include <cstdlib> > #include <iostream> > #include <stdio.h> > #include <cmath> > #include <algorithm> > #include <cstring> > using namespace std; > int ans,n,id,id1,id2; > double W,H,w,h; > double x,arg,pi=acos(-1.0),k,b,in,eps=1e-6; > struct brick > { > double x,y,w,h; > int p; > }; > brick a[1000]; > bool visit[1000],up; > int main() > { > int i,j,s,p,q; > double x0,y0,x1,y1,nx1,ny1; > while(scanf("%lf%lf%lf%lf%d",&W,&H,&w,&h,&n)&&W+H+w+h+n) > { > for(i=0;i<n;i++) > { > scanf("%lf%lf%d",&a[i].x,&a[i].y,&a[i].p); > a[i].w=w; > a[i].h=h; > } > a[n].x=a[n].y=a[n].p=0; > a[n].w=W; > a[n].h=H; > memset(visit,false,sizeof(visit)); > scanf("%lf%lf",&x,&arg); > arg=arg*pi/180.000; > k=tan(arg); > b=-k*x; > x1=x; > y1=0; > id1=n; > id2=0; > up=true; > ans=0; > while(true) > { > in=(double)1000000000*(double)1000000000; > for(i=0;i<=n;i++) > { > x0=a[i].x; > y0=k*x0+b; > if(y0<=a[i].y+a[i].h&&y0>=a[i].y) > { > if((up&&y0>y1+eps)||(!up&&y0<y1-eps)) > { > if(in>(x0-x1)*(x0-x1)+(y0-y1)*(y0-y1)) > { > in=(x0-x1)*(x0-x1)+(y0-y1)*(y0-y1); > id1=i; > id2=3; > nx1=x0; > ny1=y0; > } > } > } > x0=a[i].x+a[i].w; > y0=k*x0+b; > if(y0<=a[i].y+a[i].h&&y0>=a[i].y) > { > if((up&&y0>y1+eps)||(!up&&y0<y1-eps)) > { > if(in>(x0-x1)*(x0-x1)+(y0-y1)*(y0-y1)) > { > in=(x0-x1)*(x0-x1)+(y0-y1)*(y0-y1); > id1=i; > id2=1; > nx1=x0; > ny1=y0; > } > } > } > y0=a[i].y; > x0=(y0-b)/k; > if(x0<=a[i].x+a[i].w&&x0>=a[i].x) > { > if((up&&y0>y1+eps)||(!up&&y0<y1-eps)) > { > if(in>(x0-x1)*(x0-x1)+(y0-y1)*(y0-y1)) > { > in=(x0-x1)*(x0-x1)+(y0-y1)*(y0-y1); > id1=i; > id2=0; > nx1=x0; > ny1=y0; > } > } > } > y0=a[i].y+a[i].h; > x0=(y0-b)/k; > if(x0<=a[i].x+a[i].w&&x0>=a[i].x) > { > if((up&&y0>y1+eps)||(!up&&y0<y1-eps)) > { > if(in>(x0-x1)*(x0-x1)+(y0-y1)*(y0-y1)) > { > in=(x0-x1)*(x0-x1)+(y0-y1)*(y0-y1); > id1=i; > id2=2; > nx1=x0; > ny1=y0; > } > } > } > } > if(id1==n&&id2==0) > break; > if(id1<n) > ans+=a[id1].p; > if(id2==0) > { > x0=x1; > y0=2*a[id1].y-y1; > if(nx1==x0) > k=(double)1000000000*(double)100000000; > else > k=(ny1-y0)/(nx1-x0); > b=y0-k*x0; > up=!up; > } > else if(id2==2) > { > x0=x1; > y0=2*(a[id1].y+a[id1].h)-y1; > if(nx1==x0) > k=(double)1000000000*(double)100000000; > else > k=(ny1-y0)/(nx1-x0); > b=y0-k*x0; > up=!up; > } > else if(id2==1) > { > y0=y1; > x0=2*(a[id1].x+a[id1].w)-x1; > if(nx1==x0) > k=(double)1000000000*(double)100000000; > else > k=(ny1-y0)/(nx1-x0); > b=y0-k*x0; > } > else if(id2==3) > { > y0=y1; > x0=2*a[id1].x-x1; > if(nx1==x0) > k=(double)1000000000*(double)100000000; > else > k=(ny1-y0)/(nx1-x0); > b=y0-k*x0; > } > x1=nx1; > y1=ny1; > if(id1<n) > { > for(j=id1;j<n;j++) > a[j]=a[j+1]; > n--; > if(n==0) > break; > } > } > printf("%d\n",ans); > } > return EXIT_SUCCESS; > } > Followed by: Post your reply here: |
All Rights Reserved 2003-2013 Ying Fuchen,Xu Pengcheng,Xie Di
Any problem, Please Contact Administrator