ABC369B Piano 3
原题链接:B - Piano 3
Tag:模拟
题目描述
高桥有一架钢琴,上面有 \(100\) 个琴键排列成一排。从左数第 \(i\) 个键记为第 \(i\) 个键。
他要一个接一个地按 \(N\) 个键来演奏音乐。在按第 \(i\) 次键时,他将按键 \(A_i\),如果 \(S_i =\) L
用左手,如果 \(S_i =\) R
用右手。开始演奏前,他可以将双手放在他喜欢的任何键上,此时他的疲劳度为 \(0\)。
在演奏过程中,如果他将一只手从 \(x\) 键移动到 \(y\) 键,疲劳度就会增加 \(|y-x|\)(反之,疲劳度不会因为移动手以外的原因而增加)。用手按某个键时,手必须放在该键上。
求演奏结束时可能的最低疲劳度。
数据说明:
\(1 \le N \le 100,1 \le A_i \le 100\)
分析
注意题目不能改变顺序, 直接按照题目对点进行分类, 统计相邻项距离差之和
代码实现
void NeverSayNever() {
int n; cin >> n;
vector<int> vec1,vec2;
for (int i = 0; i < n; ++i) {
int tmp;
char ch;
cin >> tmp >> ch;
if(ch == 'L') vec1.push_back(tmp);
else vec2.push_back(tmp);
}
// std::sort(vec1.begin(), vec1.end());
// std::sort(vec2.begin(), vec2.end());
int ans = 0;
for (int i = 1; i < vec1.size(); ++i) {
ans += abs(vec1[i] - vec1[i-1]);
}
for (int i = 1; i < vec2.size(); ++i) {
ans += abs(vec2[i] - vec2[i-1]);
}
cout << ans << endl;
}
日志
本页面创建于 2024/09/17 19:07