基本思路
貪就完了。
首先要明確的是,在任何時刻都須保證機器人之間的距離最近。
因此,當某一時刻一個機器人的橫座標(或縱座標)小於另一個機器人時,需要增加橫座標(或縱座標);橫座標(或縱座標)大於另一個機器人時,需要減少橫座標(或縱座標)。
另外,題目中給到“都分配給兩個機器人”這一條件,因此不能使機器人沒有動過。
程式碼實現
#include <bits/stdc++.h>
using namespace std;
int t;
int main(){
cin >> t;
while(t--){
int n, x1, y1, x2, y2;
bool f1 = 0, f2 = 0;
string ans = "", s;
x1 = y1 = x2 = y2 = 1;
s = ' ' + s;
for(int i = 1; i <= n; i++){
if(s[i] == 'N'){
if(y1 > y2 || (y1 == y2 && !f2)){
y2++;
f2 = 1;
ans += 'H';
}
else{
y1++;
f1 = 1;
ans += 'R';
}
}
else if(s[i] == 'S'){
if(y1 > y2 || (y1 == y2 && !f1)){
y1--;
f1 = 1;
ans += 'R';
}
else{
y2--;
f2 = 1;
ans += 'H';
}
}
else if(s[i] == 'E'){
if(x1 > x2 || (x1 == x2 && !f2)){
x2++;
f2 = 1;
ans += 'H';
}
else{
x1++;
f1 = 1;
ans += 'R';
}
}
else{
if(x1 > x2 || (x1 == x2 && !f1)){
x1--;
f1 = 1;
ans += 'R';
}
else{
x2--;
f2 = 1;
ans += 'H';
}
}
}
if(x1 == x2 && y1 == y2 && f1 && f2) cout << ans;
else cout << "NO";
cout << '\n';
}
return 0;
}