简单模拟。
注意‘at k o'clock sharp’是k点整的意思,说明两只兔子交换速度只会发生在每一个时刻两只兔子开始走前,之后在这一秒内即使相遇了也不会交换速度。
代码:
#include <iostream>
#include <cstdio>
#include <cstring>
using namespace std;
int dir[4][2]={{-1,0},{0,-1},{1,0},{0,1}};
int x[2],y[2],d[2],T[2],S[2];
int N;
void Go(int id){
if(x[id]==1&&d[id]==0) d[id]=2;
else if(y[id]==1&&d[id]==1) d[id]=3;
else if(x[id]==N&&d[id]==2) d[id]=0;
else if(y[id]==N&&d[id]==3) d[id]=1;
x[id]+=dir[d[id]][0];
y[id]+=dir[d[id]][1];
}
void SetD(int &n,char c){
if(c=='N') n=0;
else if(c=='W') n=1;
else if(c=='S') n=2;
else n=3;
}
int main(){
while(~scanf("%d",&N)){
if(!N) break;
char k[2];
int s,t;
x[0]=1;y[0]=1;
x[1]=N;y[1]=N;
scanf("%s%d%d",k,&s,&t);
SetD(d[0],k[0]);
S[0]=s;T[0]=t;
scanf("%s%d%d",k,&s,&t);
SetD(d[1],k[0]);
S[1]=s;T[1]=t;
int K;
scanf("%d",&K);
for(int i=1;i<=K;i++){
for(int j=1;j<=S[0];j++) Go(0);
for(int j=1;j<=S[1];j++) Go(1);
if(x[0]==x[1]&&y[0]==y[1]){
int tmp=d[0];d[0]=d[1];d[1]=tmp;
}
else{
if(i%T[0]==0) d[0]+=1;d[0]%=4;
if(i%T[1]==0) d[1]+=1;d[1]%=4;
}
}
printf("%d %d\n%d %d\n",x[0],y[0],x[1],y[1]);
}
return 0;
}