fjnu2019第二次友谊赛 B题

### 题目链接 ###

题目大意:

给你一个 n * m 的地图以及小蛇蛇头的初始位置,告诉你它会往 上、下、左、右 四个方向走。若在走的过程中(包括结束时)会使得小蛇越界,则输出 "Game Over!" ,否则输出 "Alice!" 以及蛇头最后的坐标位置。

分析:

简单模拟题,只需模拟小蛇蛇头的运动方向,看它是否会在运动的过程中(包括结束时)死掉。若死掉则直接退出模拟并输出 "Game Over!" 即可。

代码如下:

#include<iostream>
#include<algorithm>
#include<string.h>
using namespace std;
int n,m;
int to[4][2]={{-1,0},{1,0},{0,-1},{0,1}};
char a[408][408],s[100008];
inline int Get(char x){
    if(x=='W') return 0;
    if(x=='S') return 1;
    if(x=='A') return 2;
    if(x=='D') return 3;
}
int main()
{   
    scanf("%d%d",&n,&m);
    int u,v;
    for(int i=1;i<=n;i++){
        scanf("%s",a[i]+1);
    }
    bool q=false;
    for(int i=1;i<=n;i++){
        for(int j=1;j<=m;j++){
            if(a[i][j]=='@'){
                u=i,v=j;
                a[i][j]='.';
                q=true;
                break;
            }
        }
        if(q) break;
    }
    q=false;
    scanf("%s",s+1);
    int len=strlen(s+1);
    for(int i=1;i<=len;i++){
        int j=Get(s[i]);
        u+=to[j][0],v+=to[j][1];
        if(u<1||u>n||v<1||v>m){q=true;break;}
    }
    if(q){
        printf("Game Over!
");
        return 0;
    }
    else printf("Alive! (%d,%d)
",u,v);
}
原文地址:https://www.cnblogs.com/Absofuckinglutely/p/12044396.html