链接:
https://codeforces.com/problemset/problem/1607/E
题意:
一个n*m的格子图
机器人会执行一串由LRUD组成的指令,如果超出地图,机器人就不动了
要求给出一个坐标,让机器人执行最多的指令
解:
毕竟实施题
搞一手模拟,从(0,0)开始记录路径的最大x,y和最小x,y
如果差值等于地图的长/宽(视x,y),说明不管哪里开始这个点都是要超出地图的,直接break掉
其他的根据最小x,y计算坐标,记住坐标起点(1,1)
TIPs:地图的左上角是(1,1)我研究了半天=-=
实际代码:
#include<iostream>
#include<bits/stdc++.h>
using namespace std;
int main()
{
int T;
cin>>T;
for(int f=1;f<=T;f++)
{
int n,m;
cin>>n>>m;
string s;
cin>>s;
int monx=0,mony=0;
int maxx=0,minx=0,maxy=0,miny=0;
int lg=s.length();
int ansx=1,ansy=1;
for(int i=0;i<lg;i++)
{
switch(s[i])
{
case 'R':
monx++;break;
case 'L':
monx--;break;
case 'U':
mony--;break;
case 'D':
mony++;break;
}
maxx=max(maxx,monx);
minx=min(minx,monx);
maxy=max(maxy,mony);
miny=min(miny,mony);
//cout<<maxx<<" "<<minx<<endl;
//cout<<maxy<<" "<<miny<<endl;
if( (maxx-minx)>=m || (maxy-miny)>=n ) break;
ansx=1+abs(minx);
ansy=1+abs(miny);
}
cout<<ansy<<" "<<ansx<<endl;
//cout<<"==="<<endl;
}
}
限制:
time limit per test
2 seconds
memory limit per test
256 megabytes
input
standard input
output
standard output