J钓鱼 (vector + queue)
HR的OJ!
#####Description
外出比赛是一个漫长的旅程,所以小明带了很多副扑克牌,然而他找不到两个想要打牌的队友,所以一个人玩起了接竹竿。
接竹竿的规则就是,当一个人出的牌在上面的牌中有一样数字的,则他可以将这两个牌和两牌之间的牌拿走,然后再出一张扑克。
玩接竹竿的时候,他的左手先出牌,他所赢的牌是按照以前的顺序出的。
比如:小明的左手剩了1,2两张牌,然后他只有上一步赢了一次,是2,3,4,2 那么他的出牌顺序就是1,2,2,3,4,2。
当一个人手中没牌时,则另一个人胜利。
小明玩着玩着,发现这个游戏的输赢在开始分牌的时候就已经确定了,于是,他就没有耐心玩下去了,他就写了一个小程序来判断是左手赢还是右手赢,相信作为一个程序猿/媛,你也可以的呦。
#####Input
第一行一个数T,代表小明玩了T次游戏。
每次游戏开始是一个数n,表示小明只用了数字<=n的扑克,
后面有两行数字,每行有2*n个数,第一行代表开始游戏时左手的扑克。
第二行代表开始游戏时右手的扑克。
1 <= T <= 10
1 <= n <= 13
#####Output
对于每次游戏,输出游戏的结果,结果分为左手赢,右手赢和平局
(左右手累积出牌十万次不分输赢)
每次游戏输出占一行,左手赢输出1,右手赢输出2,平局输出0。
#####Sample Input
2
1
1 1
1 1
2
1 1 1 2
1 2 2 2
#####Sample Output
0
2
####写在前面,纪念一下自己的傻逼~~~
比赛的时候犯了个错误:
for(it; it < ve.end(); it++) { //这里用的 it 。下面你还咋删除???que_right.push(*it); }que_right.push(t);ve.erase(it, ve.end()); //经过上面的循环,it == ve.end(), 还删除个毛! ac...
####思路:
这道题不难就是队列加vector模拟
####AC:
#include<iostream>
#include<algorithm>
#include<stdio.h>
#include<queue>
#include<vector>
#define N 100005
using namespace std;
int inf = 0x3f3f3f3f;
double eps = 1e-5;
vector<int> ve;
queue<int>que_left, que_right;
vector<int>::iterator it, it1;
int flag; // 标记哪只手出牌,1:表示左手, 0:表示右手
void play(int x) {if(x == 1) { //如果左手出牌 int t = que_left.front();que_left.pop();if(ve.empty()) { //如果vecotr为空,直接加入 ve.push_back(t);flag = 0; //交换 }else {it = find(ve.begin(), ve.end(), t); //看出过的牌有没有相同的it1 = it;if(it == ve.end()) {ve.push_back(t);flag = 0;}else {for(it1; it1 < ve.end(); it1++) { //比赛的时候这里用的是 itque_left.push(*it1);}que_left.push(t);ve.erase(it, ve.end()); //循环过后 it 改变。erase发生错误}} }else{int t = que_right.front();que_right.pop();if(ve.empty()) {ve.push_back(t);flag = 1;}else {it = find(ve.begin(), ve.end(), t);it1 = it;if(it == ve.end()) {ve.push_back(t);flag = 1;}else {for(it1; it1 < ve.end(); it1++) { //比赛的时候这里用的是 it que_right.push(*it1);}que_right.push(t);ve.erase(it, ve.end()); //循环换过后 it 改变。erase发生错误 }}}
}
int main() {
// freopen("in.txt", "r", stdin);int t;scanf("%d", &t);while(t--) {while(!que_left.empty()) { que_left.pop();}while(!que_right.empty()) {que_right.pop();}ve.clear();int n;scanf("%d", &n);int left, right;for(int i = 1; i <= n * 2; i++) {scanf("%d", &left); que_left.push(left);}for(int i = 1; i <= n * 2; i++) {scanf("%d", &right);que_right.push(right);}int round = 0;flag = 1; // 标记哪只手出牌,1:表示左手, 0:表示右手
// printf("round = %d que_left = %d que_right = %d\n",round, que_left.size(), que_right.size());while(!que_left.empty() && !que_right.empty() && round <= 1e5) {play(flag);round++;
// printf("round = %d ve.size = %d que_left = %d que_right = %d\n",round, ve.size(), que_left.size(), que_right.size());}if(que_left.empty()) {printf("2\n");}else if(que_right.empty()) {printf("1\n");}else{printf("0\n");} }return 0;
}
J钓鱼 (vector + queue)相关推荐
- C++中的vector使用范例-
C++中的vector使用范例 一.概述 vector是C++标准模板库中的部分内容,它是一个多功能的,能够操作多种数据结构和算法的模板类和函数库.vector是一个容器,它能够存放各种类型的对象,简 ...
- 删除有序vector中的重复值c++
简述 三种方法: 每找到连续片段,就去掉该连续片段(缺点:费时间) 双指针法,用慢指针来记录保存项,再用快指针来遍历(缺点:没有删除原数组的内容) 双指针法结合第一种:同样的,用慢指针记录的部分存下来 ...
- 【小白学习C++ 教程】二十一、C++ 中的STL容器Arrays和vector
@Author:Runsen C++的标准模板库(STL)是提供数组.向量.队列等数据结构的模板类的集合.STL是由容器.算法.迭代器组成的库. 容器 容器存储对象和数据.它们基本上是基于模板的泛型类 ...
- 牛客网暑期ACM多校训练营(第二场)J farm (二维树状数组)
题目链接: https://www.nowcoder.com/acm/contest/140/J 思路: 都写在代码注释里了,非常好懂.. for_each函数可以去看一下,遍历起vector数组比较 ...
- C++ vector类详解
转自http://blog.csdn.net/whz_zb/article/details/6827999 vector简介 vector是STL中最常见的容器,它是一种顺序容器,支持随机访问.vec ...
- C++ 标准库 vector list map使用方法
[cpp] view plaincopy List(链表) List将元素按顺序储存在链表中. 与 向量(vectors)相比, 它允许快速的插入和删除,但是随机访问却比较慢. list对象函数 as ...
- 【C++】手把手教你写出自己的Stack和Queue类
在上一篇文章中,我介绍了如何模拟实现 list容器,今天我们来实现 栈(Stack)和队列(Queue). 我将 栈 与队列放置在一起的原因是 这两种数据结构 是十分相似的,将他们放在一起可以相互比较 ...
- 【NOIP2011模拟11.1】钓鱼
[NOIP2011模拟11.1]钓鱼 Description 我们把钓鱼的过程放在坐标系里来考虑.图中蓝色的点为船,初始时它的坐标记为(Ax,y).河深为y,河宽为x.某个时刻会从左边界或右边界游出来 ...
- c++ vector用法 入门必看 超详细
1.vector的作用 vector是最常用的容器之一,功能十分强大,可以储存.管理各种类型的数据.在很多情况下可以用来代替功能比较局限的普通数组,因为我们知道,普通数组只能实现一对一的映射而不能实现 ...
最新文章
- 网页中插入VLC播放器播放rtsp视频流步骤
- Java新手看招 常用开发工具介绍
- 闪存我自己来——HDS公布闪存路线图
- Eclipse 工作目录被破坏,导致Eclipse 打不开
- php autoload用法,php自动加载__autoload()函数用法
- js 数组添加n次相同元素_数组中两次出现相同元素之间的最大距离
- 我来重新学习js的面向对象(part 4)
- 使用跟踪和调试进行条件编译
- 湖南工业大学c语言在线作业答案,湖南工业大学C语言期末考试复习题(机房题库)...
- java中qualifier注解怎么写_Java 注解 Qualifier
- LabView学习笔记(八):属性节点
- 运维,你是选择25k的996还是18k的八小时工作日?
- Chrome的历史版本下载
- 使用opencv-python读取多个(海康\大华)网络摄像头的视频流,解决实时读取延迟问题
- ios原生条形码扫描 效率低下原因
- 陈强教授 计量经济学及机器学习等数据集、程序等相关资源
- Android build sequence
- PV 和 UV 的区别
- 第五天学习--存储结构与磁盘划分
- iOS中的传感器---摇一摇, 计步器,距离感应,陀螺仪