FZU - 2091 - 播放器(栈、模拟)
题目链接
根据题意照做就行了,不过需要注意的一点是,当栈为空时(不论是初始状态还是经过pre),当前列表的歌曲是歌曲1,所以在摁next的时候会播放第二首歌曲。
const int maxn = 1e5+10;
stack<int> sk, clears;
vector<int> ans;
int main(void) {
int t;
scanf("%d", &t);
while(t--) {
int n, m;
scanf("%d%d", &n, &m);
int mm = m;
while(mm--) {
char od[6];
scanf("%s", od);
if (od[0]=='P'&&od[1]=='R') {
if (!sk.empty()) sk.pop();
if (sk.empty()) ans.push_back(1);
else ans.push_back(sk.top());
}
else if (od[0]=='N') {
int num;
if (sk.empty()) num = 2;
else num = sk.top()+1;
if (num>n) --num;
ans.push_back(num);
if (sk.empty() || sk.top()!=num) sk.push(num);
}
else {
int num;
scanf("%d", &num);
ans.push_back(num);
if (sk.empty() || sk.top()!=num) sk.push(num);
}
}
for (int i = 0; i<m; ++i)
printf("%d\n", ans[i]);
ans.clear();
sk = clears;
}
return 0;
}