Codeforces 1607E
题意描述
给你一个\(n\times m\)的矩阵,机器人最初从\((1,1)\)开始行动,给你一个命令序列,机器人依次执行该命令序列,让你求一个坐标\((x,y)\),使得机器人从这个坐标开始,能够尽可能多的执行命令序列。
思路
根据命令序列,可以维护一个机器人运动范围的矩阵,从而根据矩阵来得到答案。
AC代码
#include
#define all(x) x.begin(), x.end()
#define sz(x) (int)x.size()
using namespace std;
using ll = long long;
using pii = std::pair;
const int MOD = 1e9 + 7;
const int N = 1e5 + 5;
const int INF = 0x3f3f3f3f;
const double eps = 1e-10;
void solve()
{
int n, m;
cin >> n >> m;
string s;
cin >> s;
int x = 0, y = 0, maxl = 0, maxr = 0, maxu = 0, maxd = 0;
int ansx = 1, ansy = 1;
for(int i = 0; i < sz(s); ++i)
{
if(s[i] == 'U') --x;
else if(s[i] == 'R') ++y;
else if(s[i] == 'L') --y;
else if(s[i] == 'D') ++x;
maxl = min(maxl, y);
maxr = max(maxr, y);
maxu = min(maxu, x);
maxd = max(maxd, x);
if(maxd - maxu + 1 > n)
{
if(x == maxu) maxu++;
break;
}
if(maxr - maxl + 1 > m)
{
if(y == maxl) maxl++;
break;
}
}
cout << 1 - maxu << ' ' << 1 - maxl << '\n';
}
int main()
{
ios::sync_with_stdio(false);
cin.tie(0);
cout.tie(0);
cout << std::fixed << std::setprecision(10);
int _ = 1;
cin >> _;
while(_--) solve();
#ifdef dejavu
cout << "The run time is:" << (double)clock() / CLOCKS_PER_SEC << "s" << '\n';
#endif
}