FZU

题目链接
  根据题意照做就行了,不过需要注意的一点是,当栈为空时(不论是初始状态还是经过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
", ans[i]);
        ans.clear();
        sk = clears;
    }
    return 0;
}
原文地址:https://www.cnblogs.com/shuitiangong/p/12577793.html