题目链接
题意
- 一个NxN的方阵。
- 一个机器人从左下角出发,另一个机器人从右下角出发。
- 机器人在撞墙的时候会掉头(turn around),在固定的时间会左转
- 如果两个机器人想遇,则两个机器人互换方向(只会在整数小时时相遇),且忽略此时的左转
解决
模拟,使用一个类来封装一些函数,会好写好多
#include<bits/stdc++.h>
using namespace std;
int N;
struct TOM
{
int x,y;
int speed;
int dir; //n->1 s->2 w->3 e->4
TOM(int s = 0 , int d = 0){
x = 1;
y = 1;
speed = s;
dir = d;
}
void turnleft()
{
if(dir==1) dir=3;
else if(dir==2) dir=4;
else if(dir==3) dir=2;
else if(dir==4) dir=1;
}
void go()
{
int tmp = speed;
while(tmp--)
{
if(dir==1){
if(x==1){
tmp++;
dir = 2;
continue;
}
x--;
}
else if(dir==2){
if(x==N){
tmp++;
dir = 1;
continue;
}
x++;
}
else if(dir==3){
if(y==1){
tmp++;
dir = 4;
continue;
}
y--;
}
else if(dir==4){
if(y==N){
tmp++;
dir = 3;
continue;
}
y++;
}
}
}
};
struct JARRY
{
int x,y;
int speed;
int dir; //n->1 s->2 w->3 e->4
JARRY(int s = 0 , int d = 0){
x = N;
y = N;
speed = s;
dir = d;
}
void turnleft()
{
if(dir==1) dir=3;
else if(dir==2) dir=4;
else if(dir==3) dir=2;
else if(dir==4) dir=1;
}
void go()
{
int tmp = speed;
while(tmp--)
{
if(dir==1){
if(x==1){
tmp++;
dir = 2;
continue;
}
x--;
}
else if(dir==2){
if(x==N){
tmp++;
dir = 1;
continue;
}
x++;
}
else if(dir==3){
if(y==1){
tmp++;
dir = 4;
continue;
}
y--;
}
else if(dir==4){
if(y==N){
tmp++;
dir = 3;
continue;
}
y++;
}
}
}
};
int main()
{
while(~scanf("%d",&N))
{
if(!N) break;
char str[5];
int s1,s2,t1,t2,dir;
scanf("%s%d%d",str,&s1,&t1);
if(str[0]=='N') dir = 1;
if(str[0]=='S') dir = 2;
if(str[0]=='W') dir = 3;
if(str[0]=='E') dir = 4;
TOM tom(s1,dir);
scanf("%s%d%d",str,&s2,&t2);
if(str[0]=='N') dir = 1;
if(str[0]=='S') dir = 2;
if(str[0]=='W') dir = 3;
if(str[0]=='E') dir = 4;
JARRY jarry(s2,dir);
int k;
scanf("%d",&k);
for(int i=1;i<=k;i++){
tom.go();
jarry.go();
if(tom.x==jarry.x&&tom.y==jarry.y){
swap(tom.dir,jarry.dir);
continue;
}
if(i%t1==0) tom.turnleft();
if(i%t2==0) jarry.turnleft();
}
printf("%d %d\n",tom.x,tom.y);
printf("%d %d\n",jarry.x,jarry.y);
}
}