题目意思很简单,还记得轻工校赛好像也碰到了类似的题,但是当时没有任何思路,后来看了一眼题解,说要分为纵坐标和横坐标,然后我就写了好多次改了好多次,然后wa了n次,今晚又写了一遍,然后除了马虎,过了!看了题中的讨论,是精度的问题,于是又把原来的代码拉出来,精度一改,过了。。。。
贴两个代码,一个是以前写的需要改精度的,一个是现在写的没有改精度,感觉隔这么多天重新写的感觉就是思路更清晰了
#include<iostream> #include<cstdio> #include<string> #include<cstring> #include<cmath> #include<algorithm> #include<queue> #include<stack> #include<vector> #include<climits> #include<map> using namespace std; #define rep(i,n) for(int i=0; i<n; i++) #define repf(i,n,m) for(int i=(n); i<=(m); ++i) #define repd(i,n,m) for(int i=(n); i>=(m); --i) #define max(a,b) (a)>(b)?(a):(b) #define min(a,b) (a)<(b)?(a):(b) #define fab(a) ((a)>0?(a):(0-(a))) #define ll long long #define arc(a) ((a)*(a)) #define inf 100000 #define exp 0.000001 #define N #define pi 3.1415926535 double l,w,x,y,r,a,v,t; int main() { while(cin>>l>>w>>x>>y>>r>>a>>v>>t) { if(fabs(l-0)<exp && fabs(w-0)<exp) break; l-=r; w-=r; a *= acos(0.0)/90.0; double vx,vy; vx=cos(a)*v; vy=sin(a)*v; double ti=t; if(fabs(vx-0)>exp) { double len=(l-r)*2/fabs(vx); while(t>=len) t-=len; len=vx*t; x+=len; while(x<r || x>l) { if(x<r) x=r+(r-x); if(x>l) x=l-(x-l); } } if(fabs(vy-0)>exp) { t=ti; double len=(w-r)*2/fabs(vy); while(t>=len) t-=len; len=vy*t; y+=len; while(y<r || y>w) { if(y<r) y=r+(r-y); if(y>w) y=w-(y-w); } } printf("%0.2lf %0.2lf\n",x,y); } return 0; }
#include<iostream> #include<cstdio> #include<string> #include<cstring> #include<cmath> #include<algorithm> #include<queue> #include<stack> #include<vector> #include<climits> #include<map> using namespace std; #define rep(i,n) for(int i=0; i<n; i++) #define repf(i,n,m) for(int i=(n); i<=(m); ++i) #define repd(i,n,m) for(int i=(n); i>=(m); --i) #define ll long long #define arc(a) ((a)*(a)) #define inf 100000 #define exp 0.000001 #define N #define pi 3.141592653589 double l,w,x,y,r,a,v; double t; int main() { while(cin>>l>>w>>x>>y>>r>>a>>v>>t) { if(fabs(l-0)<exp && fabs(w-0)<exp) break; l-=r; w-=r; a=a/180*pi; double tx,ty,vx,vy; vx=v*cos(a); vy=v*sin(a); if(fabs(vx)>exp) tx=2*(l-r)/fabs(vx); else tx=0; if(fabs(vy)>exp) ty=2*(w-r)/fabs(vy); else ty=0; double te=t; if(te>tx && tx>exp) te-=ceil(te/tx)*tx; if(tx>exp) tx=te; te=t; if(te>ty && ty>exp) te-=ceil(te/ty)*ty; if(ty>exp) ty=te; x=x+vx*tx; y=y+vy*ty; while(x<r || x>l) { if(x<r) x=r-x+r; if(x>l) x=l-(x-l); } while(y<r || y>w) { if(y<r) y=r-y+r; if(y>w) y=w-(y-w); } printf("%0.2lf %0.2lf\n",x,y); } return 0; }