即日起在codingBlog上分享您的技术经验即可获得积分,积分可兑换现金哦。

中南大学第十一届大学生程序设计竞赛-COJ1898复盘拉火车

编程语言 algzjh 10℃ 0评论
本文目录
[隐藏]

1.1898: 复盘拉火车

Submit Page Summary Time Limit: 1 Sec Memory Limit: 128 Mb Submitted: 2 Solved: 2


Description


小GJ和小XS没事做用扑克牌玩起了小时候的拉火车游戏。规则如下,GJ和XS交替依次把手中的牌放到桌面上,由于GJ年长,所以他总是先放。桌面上会构成一个新的序列,当这个序列中新放入的点数与以前存在的某个点数重复的时候,这两张重复的牌和中间的牌就依次全部放回所放牌一方的序列尾部。 例如桌面上有牌A 10 2 3 5此时GJ放下一张2则桌面上剩下A 10而2 3 5 2这个序列放到GJ原本手中牌序列的尾部。

Input


有T(T<=20)组数据。 每组第一行给出GJ目前手中牌的数量N1(N1<=100)和这个手牌序列的点数各是多少 (点数可能为 A 2 3 4 5 6 7 8 9 10 J Q K) 第二行给出XS目前手中牌的数量N2(N2<=100)和这个手牌序列的点数各是多少 第三行给出一个数字K,问进行K(K<=2xN1 且 K<=2xN2)次放牌后,桌面上的序列和两个人的手牌序列是怎样的。

Output


每组数据给出3行输出,桌面上的扑克序列,小GJ的手牌序列和小XS的手牌序列。具体格式见样例。 每组数据后加空行间隔。

Sample Input


2


10 A 2 3 4 5 6 7 8 9 10


5 2 2 3 4 5


5


5 2 2 2 2 5


5 A 3 4 J K


10


Sample Output


Deck: A 2 3


GJ: 4 5 6 7 8 9 10 2 2


XS: 3 4 5

Deck: 3 J 5 K


GJ: 2 A 2 2 4 2


XS:


Hint


Source


中南大学第十一届大学生程序设计竞赛

Author


OTTFF

题目大意:扑克牌游戏“拉火车”,给出初始手牌,求k轮后的情况。


解题思路:直接用链表模拟,使用STL中的list进行简化,注意对功能函数进行测试,建议分模块写。


考查内容:基本数据结构的使用


时间复杂度: O(n)


题目难度: ★★

#include
#include
#include
using namespace std;
list<string> GJ,XS,DE;

void solve(string x,int op)
{
    list<string>::iterator it,pos;
    bool flag=false;
    for(it=DE.begin();it!=DE.end();it++)
    {
        if((*it)==x)
        {
            pos=it;
            flag=true;
        }
    }
    if(flag)
    {
        for(it=pos;it!=DE.end();it++)
        {
            if(op==1) GJ.push_back(*it);
            else XS.push_back(*it);
        }
        if(op==1) GJ.push_back(x);
        else XS.push_back(x);
        DE.erase(pos,DE.end());
    }else
    {
        DE.push_back(x);
    }
}

int main()
{
    ios::sync_with_stdio(false);
    cin.tie(0);
    cout.tie(0);
    int T;
    cin>>T;
    int n;
    while(T--)
    {
        GJ.clear();XS.clear();DE.clear();
        cin>>n;
        string tmp;
        list<string>::iterator it;
        for(int i=1;i<=n;i++)
        {
            cin>>tmp;
            GJ.push_back(tmp);
        }
        cin>>n;
        for(int i=1;i<=n;i++)
        {
            cin>>tmp;
            XS.push_back(tmp);
        }
        cin>>n;
        for(int i=1;i<=n;i++)
        {
            if(i&1)
            {
                string g=GJ.front();
                GJ.pop_front();
                solve(g,1);
            }else
            {
                string x=XS.front();
                XS.pop_front();
                solve(x,2);
            }
        }
        cout<<"Deck:";
        for(it=DE.begin();it!=DE.end();it++)
            cout<<" "<<*it;
        cout<cout<<"GJ:";
        for(it=GJ.begin();it!=GJ.end();it++)
            cout<<" "<<*it;
        cout<cout<<"XS:";
        for(it=XS.begin();it!=XS.end();it++)
            cout<<" "<<*it;
        cout<return 0;
}

转载请注明:CodingBlog » 中南大学第十一届大学生程序设计竞赛-COJ1898复盘拉火车

喜欢 (0)or分享 (0)
发表我的评论
取消评论

*

表情