题解 | MP3光标位置
#include <iostream>
using namespace std;
int main() {
int num;
string op;
cin >> num >> op;
int i = 1, j = 4; //窗口位置
int n = 1; //初始序号位置
for (char c : op) {
switch (c) {
case 'U': //向上操作
if (n != 1) { //光标不处于第一行
if (n == i) { //如果光标处于窗口顶端,向上滚动窗口
i--;
j--;
}
n--;
} else { //光标在第一行,将窗口滚动到最后一页
n = num;
i = num - 3;
j = num;
}
break;
case 'D': //向下操作
if (n != num) { //光标不处于第一行
if (n == j) { //如果光标处于窗口底端,向下滚动窗口
i++;
j++;
}
n++;
} else { //光标在最后一行,将窗口滚动到第一页
n = 1;
i = 1;
j = 4;
}
break;
default:
break;
}
}
if (num < 5) {
for (int i = 1; i <= num; i++) { //小于一页直接输出
cout << i << ' ';
}
} else {
for(int l=i;l<=j;l++) { //大于一页按照当前窗口输出
cout<<l<<' ';
}
}
cout<<endl;
cout << n;
}
// 64 位输出请用 printf("%lld")
