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

编程入门 行业动态 更新时间:2024-10-11 19:18:05

中南大学第十一届大学生<a href=https://www.elefans.com/category/jswz/34/1771020.html style=程序设计竞赛"/>

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

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<iostream>
#include<vector>
#include<list>
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<<endl;cout<<"GJ:";for(it=GJ.begin();it!=GJ.end();it++)cout<<" "<<*it;cout<<endl;cout<<"XS:";for(it=XS.begin();it!=XS.end();it++)cout<<" "<<*it;cout<<endl<<endl;}return 0;
}

更多推荐

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

本文发布于:2024-02-17 18:21:36,感谢您对本站的认可!
本文链接:https://www.elefans.com/category/jswz/34/1695030.html
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。
本文标签:程序设计   一届   中南大学   大学生

发布评论

评论列表 (有 0 条评论)
草根站长

>www.elefans.com

编程频道|电子爱好者 - 技术资讯及电子产品介绍!