1 条题解

  • 1
    @ 2024-12-14 1:17:46

    模拟是个好东西,根据题目意思进行模拟即可,主要的点在于边界处理,根据题意,边界也是停止移动,所以我们可以额外开两行一列(用X包围上下两边界以及右边界),因为遇到障碍物会停止,所以每次移动都要计算一下并判断


    初始化条件: x=1;y=0

    #include<bits/stdc++.h>
    using namespace std;
    string operation;
    int x=1,y=0,len,m,n;
    int main(){
    	ios_base::sync_with_stdio(0);
    	cin.tie(0);cout.tie(0);
    	cin>>n;
    	//添加额外的两行及一列 
        vector<string>roads(n+2,string(n+1,'X'));
        for(int i=1;i<=n;i++){
            cin>>roads[i];
            roads[i][n]='X';
        }
        cin>>m;
        for(int i=0;i<m;i++){
            cin>>operation>>len;
            //判断是否能移动 
            for(int j=0;j<len;j++){
                if(operation=="southeast"&&(roads[x][y+1]!='X'||
                roads[x+1][y]!='X')&&roads[x+1][y+1]!='X'){
                y++;x++;
    			}
                else if(operation=="east"&&roads[x][y+1]!='X')
                y++;
                else if(operation=="south"&&roads[x+1][y]!='X')
                x++;
            }
        }
        //若到达出口,输出 "YaHo!"
        //若没有到达,输出坐标,注意y要加上1 
        if(roads[x][y]=='E')cout<<"YaHo!";
        else cout<<x<<' '<<y+1;
    	return 0;
    }
    

    时空复杂度O(n)

    • 1

    信息

    ID
    971
    时间
    1000ms
    内存
    256MiB
    难度
    8
    标签
    递交数
    287
    已通过
    46
    上传者