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