HDU4452 Running Rabbits(模拟)

来源:互联网 发布:网络维护培训资料 编辑:程序博客网 时间:2024/05/18 09:35

题目链接

题意

  1. 一个NxN的方阵。
  2. 一个机器人从左下角出发,另一个机器人从右下角出发。
  3. 机器人在撞墙的时候会掉头(turn around),在固定的时间会左转
  4. 如果两个机器人想遇,则两个机器人互换方向(只会在整数小时时相遇),且忽略此时的左转

解决

模拟,使用一个类来封装一些函数,会好写好多

#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);    }}
原创粉丝点击