CF1974D Ingenuity-2

KukCair發表於2024-11-23

基本思路

貪就完了。

首先要明確的是,在任何時刻都須保證機器人之間的距離最近。

因此,當某一時刻一個機器人的橫座標(或縱座標)小於另一個機器人時,需要增加橫座標(或縱座標);橫座標(或縱座標)大於另一個機器人時,需要減少橫座標(或縱座標)。

另外,題目中給到“都分配給兩個機器人”這一條件,因此不能使機器人沒有動過。

程式碼實現

#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;
}