题目链接: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;
}