第二题:T2移动复位
标签:字符串、模拟
题意:给定一个二维平面上的顶点,然后进行一系列指令操作,指令操作以字符串的形式给出:
R
R
R 表示该点沿
X
X
X 轴坐标正方向移动了一个单位
L
L
L 表示该点沿
X
X
X 轴坐标负方向移动了一个单位
U
U
U 表示该点沿
Y
Y
Y 轴坐标正方向移动了一个单位
D
D
D 表示该点沿
Y
Y
Y 轴坐标负方向移动了一个单位
求这些指令执行完之后,至少再增加多少条指令能让这个点返回起点(原来的位置)。
题解:每次都是上下左右移动一个位置坐标,假设原来起点在原点(
0
,
0
0,0
0,0),最少指令数,即求当前坐标(
x
,
y
x,y
x,y)与原点的曼哈顿距离:
∣
x
∣
+
∣
y
∣
|x|+|y|
∣x∣+∣y∣。
我这边用了
m
a
p
map
map去统计了各个移动方向指令的数量,然后东西和南北方向分别做抵消,求绝对值。
曼哈顿距离:两点在南北⽅向上的距离加上在东西⽅向上的距离。
代码:
#include <bits/stdc++.h>
using namespace std;
map<char, int> m;
int main() {
string s;
cin >> s;
for (int i = 0; i < s.size(); i++) {
m[s[i]]++;
}
cout << abs(m['L'] - m['R']) + abs(m['U'] - m['D']) << endl;
return 0;
}