定义光标所指的歌曲序号和光标在屏幕中的位置,对于光标处于第一页和光标处于最后一页分别进行处理,并且判断一般情况进行处理,最后根据光标在屏幕中的位置输出当前列表和选中歌曲,对于歌曲数小于4的情况当前列表就是所有歌曲。

#include <iostream>
using namespace std;

int main() {
    int order = 0;
    int n;
    string s;
    cin >> n;
    cin >> s;
    int select = 0;
    for (char letter : s) {
        if (letter == 'U') {
            if (order > 0) {
                order--;
            } else {
                if (select == 0) {
                    order = 3;
                }
            }
            select = (select - 1 + n) % n;
        } else {
            if (order < 3) {
                order++;
            } else {
                if (select == n - 1) {
                    order = 0;
                }
            }
            select = (select + 1) % n;
        }
    }
    if (n < 4) {
        for (int i = 1; i <= n; i++) {
            cout << i << ' ';
        }
    } else {
        for (int i = select - order; i <= select - order + 3; i++) {
            cout << i + 1 << ' ';
        }
    }
    cout << endl;
    cout << select + 1;
    return 0;
}
// 64 位输出请用 printf("%lld")