E. Robot on the Board 1
题目大意:给你一个字符串,由"UDLR"组成,"UDLR"表示方向。你有一个n*m的方格,请你找到一个起点,使得这个起点按照给定的字符串进行移动,在走出棋盘(或者执行所有步数)前执行最多的步数。
解题思路:先将起点定在(1,1),当你要走出棋盘的时候,看看能不能通过平移棋盘解决这个问题。同时你也需要记录当前到达的最大x和y,在平移棋盘时最大的x和y不能超过n和m。
#include <iostream>
#include <string>
using namespace std;
int n, m, x, y, nx, ny, maxx, maxy;
string str;
void work() {
cin >> n >> m;
cin >> str;
x = nx = maxx = 1;
y = ny = maxy = 1;
for(int i = 0; i < str.size(); i++) {
if (str[i] == 'U') {
if (nx > 1) nx--;
else {
if (x == n || maxx == n) return ;
x++, maxx++;
}
}
if (str[i] == 'D') {
if (nx < n) nx++;
else return ;
}
if (str[i] == 'L') {
if (ny > 1) ny--;
else {
if (y == m || maxy == m) return ;
y++, maxy++;
}
}
if (str[i] == 'R') {
if (ny < m) ny++;
else return ;
}
maxx = max(nx, maxx);
maxy = max(ny, maxy);
}
}
int main()
{
int T;
cin >> T;
while(T--) {
work();
cout << x << ' ' << y << endl;
}
return 0;
}
G. Banquet Preparations 1
题目大意:
解题思路: