题目来源
Problem - E - Codeforceshttps://codeforces.com/contest/1607/problem/E
题干
官方思路
解释
对于任意起始坐标(c,r)要想robot 出局,只有四种可能,向左移动c个单位,或者向右移动m-c+1个单位 。向上r个单位,或者向下n-r+1个单位。(暂时未看懂,待更新)
snow的思路
参考自文章:
代码段解释
在格子外放上四条扫描线,统计完各反向上的操作次数后,进行扫描线最极位置的更新操作。
在极限外的格子不可能是所求的初始坐标点。
如果左右或上下扫描线之间已经无法容纳格点,输出最后一次存入的格点
如果最后还能放至少一个格点,则将u+1,l+1作为新的格点存入。
扫描二维码关注公众号,回复:
13179073 查看本文章
最终输出最后一个合法的格点
void solve()
{
int n, m;
cin >> n >> m;
string s;
cin >> s;
int l = 0, u = 0, d = n + 1, r = m + 1;
//初始化四个扫描线
pair<int, int>res;
res = { 1,1 };
int suml = 0, sumr = 0, sumu = 0, sumd = 0;
//统计字符出现的数量。
for (auto c : s)
{
if (c == 'U')sumu++;
else if (c == 'L')suml++;
else if (c == 'R')sumr++;
else sumd++;
}
l = max(l, suml - sumr);
r = min(r, m + 1 - (sumr - suml));
u = max(u, sumu - sumd);
d = min(d, n + 1 - (sumd - sumu));
if(l + 1 >= r || u + 1 >= d)
{
cout << res.first << ' ' << res.second << endl;
return;
}
else
{
res = { u + 1,l + 1 };
}
cout << res.first << ' ' << res.second << endl;
}