3.電子舞龍【算法賽】 - 藍橋云課
問題描述
話說這年頭,連舞龍都得電子化!這不,藍橋村的老程序員王大爺突發奇想,用LED燈帶和一堆傳感器鼓搗出了一條“電子舞龍”,它能根據程序指令在村里的廣場上“翩翩起舞”。
廣場被王大爺抽象成一個二維坐標系,龍頭從坐標原點 (0,0) 出發,根據接收到的指令移動:
- L - 龍頭向左移動一格。
- R - 龍頭向右移動一格。
- U - 龍頭向上移動一格。
- D - 龍頭向下移動一格。
秉承著“龍歸故里,新年新氣象”的寓意,王大爺希望龍頭在完成一系列眼花繚亂的舞動后,能夠精準地回到最初的起點 (0,0)。
然而,計劃趕不上變化,就在演出即將開始之際,一個熊孩子趁王大爺不注意,偷偷修改了電子舞龍的控制指令!這下可好,原本完美的程序被改得亂七八糟,龍頭跳完舞后,估計得跑到隔壁村去拜年了!
王大爺拿到被熊孩子涂改過的指令,他知道其中有一些指令是錯誤的,需要修改一些指令才能讓電子龍回到原點。例如,他可以把 L 指令改成 R,或者把 U 改成 D,諸如此類。
現在,請你幫助王大爺計算出最少需要修改多少次指令,才能讓電子龍頭順利回到起始點 (0,0)。如果無論怎么改都無法回到起始點,請輸出 -1(這意味著今年的電子舞龍表演可能得換成傳統的舞獅了)。
輸入格式
輸入一行,包含一個僅由 L、R、U、D 所構成字符串 S (1 ≤ |S| ≤ 10?),表示被熊孩子修改過的錯誤指令。
輸出格式
輸出一個整數,表示最少需要修改的指令次數。如果無論如何都無法回到起始點,輸出 -1。
樣例輸入
LLUU
樣例輸出
2
運行限制
思路:
代碼如下:
#include <iostream>
#include <algorithm>
#include <cmath>
#include <string>
using namespace std;typedef long long ll;int main() {ll l = 0, r = 0, u = 0, d = 0; // 初始化變量string s;cin >> s;// 統計指令數量for (ll i = 0; i < s.size(); i++) {if (s[i] == 'L') l++;if (s[i] == 'R') r++;if (s[i] == 'U') u++;if (s[i] == 'D') d++;}if ((abs(l - r) + abs(u - d)) % 2 == 0){// 計算最少修改次數ll cnt = (abs(l - r) + abs(u - d)) / 2;cout << cnt << endl;} else {cout << -1 << endl;}return 0;
}