fzu 2091プレーヤー(スタック)

8383 ワード

Description
shadowは音楽を聴くのが好きで、そこでv 11は自分で1つのプレーヤーを書いてshadowにあげて、このプレーヤーは1つのプレイリストがあって、1つの“次の1首”のボタンがあって、1つの“前の1首”のボタンがあって、もう1つのプレイ記録があります.
最初はプレーヤーがプレイリストの最初の曲を再生し、「次の曲」ボタンを押すと、現在の曲がプレイリストの次の曲を再生し、現在の曲がプレイリストの最後の曲であれば、プレイリストの最後の曲を再生します.「前の曲」ボタンを押すと、再生記録の最後の歌が消去され、消去後の再生記録の最後の歌が再生され、消去後の再生記録が空になると、プレイリストの最初の歌が再生されます.プレイリストの曲を押すと、その曲が再生されます.
いずれにしても、プレーヤーが1曲を再生すると、その曲が再生記録の最後の曲と異なる場合、または再生記録が空の場合、その曲を再生記録に追加して最後の曲となる.
今shadowはプレーヤーに対して一連の操作を行って、それではあなたは私にshadowがすべての操作を行った後に、プレーヤーはどの歌を放送していますか?
Input
入力データの最初の行は、テストデータのグループ数を表す整数Tを含む.テストデータのセットごとに:
1行目は2つの整数n(0次のm行は、動作ごとに以下の3つの形式の1つです.
PREは、「前へ」ボタンを押したことを示します.
PLAY xは、xが整数(0NEXT表示では「次へ」ボタンが押されています.
Output
各グループのデータ:m行を出力し、各行に整数を1つずつ出力し、1つの操作を実行した後にプレーヤーが再生している曲を示す.
Sample Input
1
5 10
PRE
NEXT
PLAY 5
NEXT
PLAY 5
PLAY 3
NEXT
PRE
PRE
PRE

Sample Output
1
2
5
5
5
3
4
3
5
2
 
#include <iostream>
#include <string>
using namespace std;
string temp;
int st=0,en=0,a[100000],n,m;
void pre()
{
    en=en-1;
    if(en<st)
    {
        st=0;en=0; a[st]=1;
        cout<<a[st]<<endl;
    }
    else
        cout<<a[en]<<endl;
}
void next()
{
    if(a[en]<n)
    {
        en++;
        a[en]=a[en-1]+1;
        cout<<a[en]<<endl;
    }
    else
        cout<<a[en]<<endl;
}
void play()
{
    int song;
    cin>>song;
    if(song!=a[en])
    {
        en++;
        a[en]=song;
        cout<<a[en]<<endl;
    }
    else
        cout<<a[en]<<endl;
}
int main()
{
    int T;
    cin>>T;
    while(T--)
    {
        int i;
        st=0;en=0;
        cin>>n>>m;
        a[0]=1;
        for(i=0;i<m;i++)
        {
            cin>>temp;
            if(temp=="PRE")
                pre();
            if(temp=="NEXT")
                next();
            if(temp=="PLAY")
                play();
        }
    }
    return 0;
}