题解 | #MP3光标位置#
MP3光标位置
https://www.nowcoder.com/practice/eaf5b886bd6645dd9cfb5406f3753e15
// 利用数组 array<int,4> dq{0}; 来模拟菜单
#include <array>
#include <deque>
#include <iostream>
using namespace std;
int main() {
int n;
string command;
cin >> n >> command;
int len = command.length();
int pos = 1;
array<int,4> dq{0};
if(n <= 4 ){
for(int i = 0 ; i < len; ++i){
if(command[i] == 'U'){
if(--pos == 0){
pos = n;
}
}else{
if(++pos == n+1){
pos = 1;
}
}
}
for(int i = 0 ; i < n; ++i){
cout << i+1 << " ";
}
cout << endl;
cout << pos << endl;
}
else{
//采用滑动窗口
for(int i = 0 ; i < 4; ++i){
dq[i] = i + 1;
}
for(int i = 0 ; i < len; ++i){
if(command[i] == 'U'){
if(--pos == 0){
pos = n;
//采用滑动窗口
for(int j = 0 ; j < 4; ++j){
dq[j] = n - 4 + j + 1;
}
}else{
if(pos == dq[0]-1){
for(int j = 0 ; j < 4; ++j){
dq[j] -= 1;
}
}
}
}else{
if(++pos == n+1){
pos = 1;
//采用滑动窗口
for(int j = 0 ; j < 4; ++j){
dq[j] = j + 1;;
}
}else{
if(pos == dq[3]+1){
for(int j = 0 ; j < 4; ++j){
dq[j] += 1;;
}
}
}
}
}
for(auto p : dq){
cout << p << " ";
}
cout << endl;
cout << pos << endl;
}
}
// 64 位输出请用 printf("%lld")

