HDU 4452 Running Rabbits 【模拟】

来源:互联网 发布:思科大数据平台 编辑:程序博客网 时间:2024/05/16 06:37

题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=4452


所说这题把我队友坑了好几天。思维有洞呀,我没有想到什么bug去帮他解决。最后也是根据题意直接模拟过的。


#include<cstdio>#include<algorithm>using namespace std;int Map[25][25];struct Rabbit{int x,y;int s,t;char dir[2];}ra,rb,ne;//ra,rb两只rabbit和ne表示下一步next int n;void Run(Rabbit k,int s){//先计算出每一刻两只rabbit跑到的地方(假设没墙) ne.x=k.x,ne.y=k.y; if(k.dir[0]=='S') ne.x=k.x+s;else if(k.dir[0]=='N') ne.x=k.x-s;else if(k.dir[0]=='E') ne.y=k.y+s;else ne.y=k.y-s;}void Judgedir(Rabbit &k){//判断是否走超过了墙壁 if(ne.x>n) k.x=2*n-ne.x,k.dir[0]='N';else if(ne.x<1) k.x=2-ne.x,k.dir[0]='S';else k.x=ne.x;if(ne.y>n) k.y=2*n-ne.y,k.dir[0]='W';else if(ne.y<1) k.y=2-ne.y,k.dir[0]='E';else k.y=ne.y;}void Chdir(Rabbit &k){//左转 if(k.dir[0]=='E') k.dir[0]='N';else if(k.dir[0]=='W') k.dir[0]='S';else if(k.dir[0]=='S') k.dir[0]='E';else k.dir[0]='W';}int main(){int i,tt;while(scanf("%d",&n),n){scanf("%s%d%d",ra.dir,&ra.s,&ra.t);scanf("%s%d%d",rb.dir,&rb.s,&rb.t);ra.x=1,ra.y=1;rb.x=n,rb.y=n;scanf("%d",&tt);for(i=1;i<=tt;i++){Run(ra,ra.s);//跑一次 Judgedir(ra);//判断一次(是否出墙) Run(rb,rb.s);Judgedir(rb);//printf("%s %s\n",ra.dir,rb.dir);if(ra.x==rb.x&&ra.y==rb.y) swap(ra.dir[0],rb.dir[0]);//如果在同一房间 else{//不在同一房间 if(i%ra.t==0) Chdir(ra);if(i%rb.t==0) Chdir(rb);}//printf("%d %d\n%d %d\n",ra.x,ra.y,rb.x,rb.y);//printf("%s %s\n\n",ra.dir,rb.dir);}printf("%d %d\n%d %d\n",ra.x,ra.y,rb.x,rb.y);}return 0;}