题目链接:
http://acm.hdu.edu.cn/showproblem.php?pid=4452
题解:
模拟兔子走路过程即可。
代码:
#include<iostream>
#include<algorithm>
#include<stdio.h>
#include<math.h>
using namespace std;
int n,k,v1,v2,t1,t2;
char s1[3],s2[3];
int d[2][4]={{-1,0,1, 0},
{ 0,1,0,-1}};
int z(char a)
{
if (a=='N') return 0;
if (a=='E') return 1;
if (a=='S') return 2;
return 3;
}
int main()
{
while(1)
{
scanf("%d",&n);
if (n==0) return 0;
scanf("%s%d%d",s1,&v1,&t1);
scanf("%s%d%d",s2,&v2,&t2);
scanf("%d",&k);
int f1=z(s1[0]);
int f2=z(s2[0]);
int stx1=1,sty1=1;
int stx2=n,sty2=n;
//cout<<0<<endl;
//cout<<f1<<' '<<f2<<endl;
for (int i=1;i<=k;i++)
{
int nex1=stx1+d[0][f1]*v1;
int ney1=sty1+d[1][f1]*v1;
int nex2=stx2+d[0][f2]*v2;
int ney2=sty2+d[1][f2]*v2;
if (nex1<1)
{
int cha=abs(nex1-1);
nex1=1+cha;
f1=(f1+2)%4;
}
if (nex1>n)
{
int cha=abs(nex1-n);
nex1=n-cha;
f1=(f1+2)%4;
}
if (ney1<1)
{
int cha=abs(ney1-1);
ney1=1+cha;
f1=(f1+2)%4;
}
if (ney1>n)
{
int cha=abs(ney1-n);
ney1=n-cha;
f1=(f1+2)%4;
}
if (nex2<1)
{
int cha=abs(nex2-1);
nex2=1+cha;
f2=(f2+2)%4;
}
if (nex2>n)
{
int cha=abs(nex2-n);
nex2=n-cha;
f2=(f2+2)%4;
}
if (ney2<1)
{
int cha=abs(ney2-1);
ney2=1+cha;
f2=(f2+2)%4;
}
if (ney2>n)
{
int cha=abs(ney2-n);
ney2=n-cha;
f2=(f2+2)%4;
}
stx1=nex1;sty1=ney1;
stx2=nex2;sty2=ney2;
if (stx1==stx2&&sty1==sty2)
{
swap(f1,f2);
continue;
}
if (i%t1==0)
f1=(f1+3)%4;
if (i%t2==0)
f2=(f2+3)%4;
// cout<<i<<endl;
// cout<<f1<<' '<<stx1<<' '<<sty1<<endl;
// cout<<f2<<' '<<stx2<<' '<<sty2<<endl;
}
printf("%d %d\n",stx1,sty1);
printf("%d %d\n",stx2,sty2);
}
}