【CodeForces - 546C】Soldier and Cards (vector或队列)
Soldier and Cards
老样子,直接上国语吧
Descriptions:
两个人打牌,从自己的手牌中抽出最上面的一张比较大小,大的一方可以拿对方的手牌以及自己打掉的手牌重新作为自己的牌,放在自己手牌的最下方,而且对方输掉的那张手牌需要放在上面,自己赢的手牌放在下面。
Input
第一行的数n代表一共有几张牌
第二行第一个数x代表第一个人有x张牌
第三行第一个数y代表第二个人有y张牌
Output
第一个数代表进行了几轮,第二个数代表谁赢
Examples
Input4
2 1 3
2 4 2
Output6 2
Input3
1 2
2 1 3
Output-1
题目链接:
https://vjudge.net/problem/CodeForces-546C
我的做法可能有点偏了,因为不知道有几个牌,就用vector存一下,然后每次拿出双方的第一张牌进行比较,再进行模拟,现在想想可以用queue来写,当时写的有点粗糙,但是思路很清晰,一遍就AC了
AC代码
#include <iostream>
#include <cstdio>
#include <fstream>
#include <deque>
#include <vector>
#include <queue>
#include <string>
#include <cstring>
#include <map>
#include <stack>
#include <set>
#include <sstream>
#define mod 1000000007
#define ll long long
#define INF 0x3f3f3f3f
using namespace std;
vector<int>a;
vector<int>b;
int n;
int f,flag=;
int x,y;
int sum=;
int main()
{
cin >> n;
cin >> x;
for(int i=; i<x; i++)
{
int num;
cin>>num;
a.push_back(num);
}
cin>>y;
for(int i=; i<y; i++)
{
int num;
cin>> num;
b.push_back(num);
}
while(!a.empty()&&!b.empty())//两人的卡牌都不为空
{
sum++;
int num1=a.front();//都取出第一张卡牌进行比较
int num2=b.front();
if(num1>num2)//1号大于2号就把2号和自己的卡牌一次放在队尾
{
a.push_back(num2);
a.push_back(num1);
vector<int>::iterator t1=a.begin();
vector<int>::iterator t2=b.begin();
a.erase(t1);
b.erase(t2);
}
if(num2>num1)//2号大于1号就把1号和自己的卡牌一次放在队尾
{
b.push_back(num1);
b.push_back(num2);
vector<int>::iterator t1=a.begin();
vector<int>::iterator t2=b.begin();
a.erase(t1);
b.erase(t2);
}
if(!b.empty())//谁的卡牌为空谁就输了
f=;
if(!a.empty())
f=;
if(sum>=n*n*n*n*n*n)//判断一下,要是循环这么多次还没分出胜负,应该就是死循环了
{
flag=;
cout<<"-1"<<endl;
break;
}
}
if(flag)
cout<<sum<<" "<<f<<endl;
return ;
}
【CodeForces - 546C】Soldier and Cards (vector或队列)的更多相关文章
- cf 546C Soldier and Cards
题目链接:C. Soldier and Cards Two bored soldiers are playing card war. Their card deck consists of exact ...
- 546C. Soldier and Cards
题目链接 题意 两个人玩扑克,共n张牌,第一个人k1张,第二个人k2张 给定输入的牌的顺序就是出牌的顺序 每次分别比较两个人牌的第一张,牌上面数字大的赢,把这两张牌给赢的人,并且大的牌放在这个人的牌最 ...
- CodeForces 546C(队列)
CodeForces 546C Soldier and Cards Time Limit:2000MS Memory Limit:262144KB 64bit IO Format:%I ...
- 【codeforces 546C】Soldier and Cards
time limit per test2 seconds memory limit per test256 megabytes inputstandard input outputstandard o ...
- Codeforces Round #304 (Div. 2) C. Soldier and Cards —— 模拟题,队列
题目链接:http://codeforces.com/problemset/problem/546/C 题解: 用两个队列模拟过程就可以了. 特殊的地方是:1.如果等大,那么两张牌都丢弃 : 2.如果 ...
- Codeforces Round #304 (Div. 2) C. Soldier and Cards 水题
C. Soldier and Cards Time Limit: 20 Sec Memory Limit: 256 MB 题目连接 http://codeforces.com/contest/546 ...
- 队列 Soldier and Cards
Soldier and Cards 题目: Description Two bored soldiers are playing card war. Their card deck consists ...
- queue+模拟 Codeforces Round #304 (Div. 2) C. Soldier and Cards
题目传送门 /* 题意:两堆牌,每次拿出上面的牌做比较,大的一方收走两张牌,直到一方没有牌 queue容器:模拟上述过程,当次数达到最大值时判断为-1 */ #include <cstdio&g ...
- CF Soldier and Cards (模拟)
Soldier and Cards time limit per test 2 seconds memory limit per test 256 megabytes input standard i ...
随机推荐
- DataGuard备库ORA-01196故障恢复一则
问题现象 在使用shutdown abort停DataGuard备库后.备库不能open,报ORA-01196错误. 详细例如以下: 发现一备库不能应用日志.查看备库日志没发现报错.怀疑是备库应用日志 ...
- SQL server 子查询的应用
设置主键关联表格 时间函数的应用
- hive:Access denied for user 'root'@'%'
配置hive全分布模式时候,在mysql里面创建用户:create user 'hive' identified by 'hive'; 然后给hive帐号分配全部权限: grant all privi ...
- 标准C头文件
ISO C标准定义的头文件: POSIX标准定义的必须的头文件: POSIX标准定义的XSI可选头文件: POSIX标准定义的可选头文件:
- 64位CentOs7源码安装mysql-5.6.35过程分享
首先安装依赖包,避免在安装过程中出现问题 [root@bogon liuzhen]# yum -y install gcc gcc-c++[root@bogon liuzhen]# yum -y in ...
- mac上pydev
转自:http://m.blog.csdn.net/blog/yangfu132/23689823 本来网上有教程,但是往往又一些不周到的地方,让人走了不少弯路. 使用 PyDev 进行调试 第一步: ...
- UVA - 11019 Matrix Matcher hash+KMP
题目链接:传送门 题解: 枚举每一行,每一行当中连续的y个我们hash 出来 那么一行就是 m - y + 1个hash值,形成的一个新 矩阵 大小是 n*(m - y + 1), 我们要找到x*y这 ...
- List 调用 remove 方法时抛出 java.lang.UnsupportedOperationException 异常原因
原因 使用 Arrays.asList(arr) 转换的 List 并不能进行 add 和 remove 操作. Arrays.asList(arr) 返回的类型是 Aarrays$Arr ...
- 常用的sql命令
1 mysql创建数据库 create database [database name]; 2 创建表 create table [table name]([first column name] [f ...
- js遍历map
//火狐控制台打印输出: Object { fileNumber="文件编号", fileName="文件名称"} console.log(map); for( ...