翻译:
有一个机器人在一个没有尽头的方格场上。最初,机器人位于坐标为(0,0)的单元中。他将执行由一串大写拉丁字母“L”、“R”、“D”、“U”所描述的命令。当一个命令被执行时,机器人只是朝着相应的方向移动:
“L”:向左一个单元格(当前单元格的𝑥-coordinate减少1);
“R”:向右一个单元格(当前单元格的𝑥-coordinate增加1);
'D':向下一个单元格(当前单元格的𝑦-coordinate减少1);
'U':向上一个单元格(当前单元格的𝑦-coordinate增加了1)。
您的任务是在字段的一个单元格中放置一个障碍物,以便在执行命令后,机器人将返回其路径(0,0)的原始单元格。当然,在起始单元格(0,0)中不能放置障碍物。可以保证如果没有放置障碍物,那么机器人将不会返回起始单元。
障碍物对机器人的运动的影响是这样的:如果它试图向某个方向前进,并且存在障碍物,那么它只是停留在原地(障碍物也会保留,也就是说它不会消失)。
找到字段(除(0,0)外)中任意一个单元格,如果在那里设置一个障碍物,机器人将在执行所有命令后返回到单元格(0,0)。如果没有解决办法,那就报告。
输入
第一行包含一个整数𝑡(1≤𝑡≤500)——测试用例的数量。
每个测试用例由包含𝑠的单行组成——命令序列,仅由大写拉丁字母‘L’、‘R’、‘D’、‘U’组成。𝑠的长度为1 ~ 5000(含)。𝑠上的附加约束:如果没有障碍,执行此命令序列将机器人引导到(0,0)以外的某个单元格。
测试中所有𝑠的长度之和不超过5000。
输出
对于每个测试用例打印一行:
如果有解决方案,打印两个整数𝑥和𝑦(−109≤𝑥,𝑦≤109),使得(𝑥,𝑦)中的障碍将迫使机器人返回到单元格(0,0);
否则,打印两个0(即。0 0)。
如果有多个答案,则可以打印其中任何一个。
例子
inputCopy
4
l
RUUDL
LLUU
DDDUUUUU
outputCopy
1 0
1 2
0 0
0 1
思路:根据给的操作来进行操作,可以放一个障碍物,让机器人回到起点,如果可以输出障碍物的位置,不可以就输出0 0 。
刚开始我的思路就是特判,操作中含有几个不同的操作,如果是1个那么直接放就好,两个的话,可以判下他们相反,然后来放,不相反就是不可以。
然后其余的我们就用双指针,前后,如果对应就往里面缩,直到不对应了,在判中间的操作是否全部相同,相同的话就可以直接放。
感觉很对emmmmm,但是后来wa了,因为还可以刚开始的一部分不跑,然后中后部分相反对应。
然后发现这道题的数据范围很小,可以直接暴力,我们每次都让他跑,然后在对应的位置放障碍物,看看它不跑障碍物,是否能跑回原点。
代码:
/*Looking! The blitz loop this planet to search way
Only my RAILGUN can shoot it 今すぐ
身体中を 光の速さで
駆け巡った確かな予感
掴め! 望むものなら残さず
輝ける自分らしさで
信じてるよ あの日の誓いを
この瞳に光る涙それさえも 強さになるから
*/
#include <iostream>
#include <algorithm>
#include <string.h>
#include <string>
#include <math.h>
#include <stdio.h>
#include<vector>
#include<queue>
#include<map>
#include<set>
#include<tuple>
#include<numeric>
#include<stack>
using namespace::std;
typedef long long ll;
int n,t;
inline __int128 read(){
__int128 x = 0, f = 1;
char ch = getchar();
while(ch < '0' || ch > '9'){
if(ch == '-')
f = -1;
ch = getchar();
}
while(ch >= '0' && ch <= '9'){
x = x * 10 + ch - '0';
ch = getchar();
}
return x * f;
}
inline void print(__int128 x){
if(x < 0){
putchar('-');
x = -x;
}
if(x > 9)
print(x / 10);
putchar(x % 10 + '0');
}
void ss(int &x,int &y,char a){
if (a=='R') {
x++;
}
if (a=='L') {
x--;
}
if (a=='D') {
y--;
}
if (a=='U') {
y++;
}
}
string s;
void wanyurukong(){
cin>>s;
for (int i =0; i<s.size(); i++) {
int fx=0,fy=0,cx=0,cy=0;
for (int j =0; j<=i; j++) {
ss(fx, fy, s[j]);
}
for (int k=0; k<s.size(); k++) {
int anx=cx,any=cy;
ss(anx, any, s[k]);
if (anx!=fx||any!=fy) {
cx=anx;
cy=any;
}
}
if (cx==0&&cy==0) {
printf("%d %d\n",fx,fy);return;
}
}
printf("0 0\n");return;
}
int main(){
ios::sync_with_stdio(false);
cin.tie(); cout.tie();
cin>>t;
while (t--) {
wanyurukong();
}
//wanyurukong
return 0;
}