1 条题解
-
1
模拟是个好东西,根据题目意思进行模拟即可,主要的点在于边界处理,根据题意,边界也是停止移动,所以我们可以额外开两行一列(用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
- 上传者