Skip to content

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