题解 | #MP3光标位置#
MP3光标位置
https://www.nowcoder.com/practice/eaf5b886bd6645dd9cfb5406f3753e15
#include <array> #include <deque> #include <iostream> #include <vector> using namespace std; int main() { int n; string order; cin>>n>>order; deque<int>deq; vector<int>arr(n+1,0); for(int i=1;i<=4&&i<=n;++i) { deq.push_back(i); arr[i]=1; } int pos=0; for(int i=0;i<order.size();++i) { if(order[i]=='U') { pos=(pos-1+n)%n; if(pos==n-1&&n>4) { deq.clear(); fill(arr.begin(),arr.end(),0); for(int i=0;i<4;++i) { deq.push_front(n-i); arr[n-i]=1; } } else if(arr[pos+1]!=1&&n>4) { arr[pos+1]=1; arr[deq.back()]=0; deq.pop_back(); deq.push_front(pos+1); } } else { pos=(pos+1)%n; if(pos==0&&n>4) { deq.clear(); fill(arr.begin(),arr.end(),0); for(int i=0;i<4;++i) { deq.push_back(i+1); arr[i+1]=1; } } else if(arr[pos+1]!=1&&n>4) { arr[pos+1]=1; arr[deq.front()]=0; deq.pop_front(); deq.push_back(pos+1); } } } for(auto i:deq)cout<<i<<" "; cout<<endl; cout<<pos+1<<endl; } // 64 位输出请用 printf("%lld")
deque(4) 用来存菜单,注意push 时的方向
下标 (pos+1)%n、(pos-1+n)%n
特殊情况:n<=4 ,不需要更新 deque
front---------
1----
2-----
3-----
4------
back-----------------