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)相关推荐

  1. C++中的vector使用范例-

    C++中的vector使用范例 一.概述 vector是C++标准模板库中的部分内容,它是一个多功能的,能够操作多种数据结构和算法的模板类和函数库.vector是一个容器,它能够存放各种类型的对象,简 ...

  2. 删除有序vector中的重复值c++

    简述 三种方法: 每找到连续片段,就去掉该连续片段(缺点:费时间) 双指针法,用慢指针来记录保存项,再用快指针来遍历(缺点:没有删除原数组的内容) 双指针法结合第一种:同样的,用慢指针记录的部分存下来 ...

  3. 【小白学习C++ 教程】二十一、C++ 中的STL容器Arrays和vector

    @Author:Runsen C++的标准模板库(STL)是提供数组.向量.队列等数据结构的模板类的集合.STL是由容器.算法.迭代器组成的库. 容器 容器存储对象和数据.它们基本上是基于模板的泛型类 ...

  4. 牛客网暑期ACM多校训练营(第二场)J farm (二维树状数组)

    题目链接: https://www.nowcoder.com/acm/contest/140/J 思路: 都写在代码注释里了,非常好懂.. for_each函数可以去看一下,遍历起vector数组比较 ...

  5. C++ vector类详解

    转自http://blog.csdn.net/whz_zb/article/details/6827999 vector简介 vector是STL中最常见的容器,它是一种顺序容器,支持随机访问.vec ...

  6. C++ 标准库 vector list map使用方法

    [cpp] view plaincopy List(链表) List将元素按顺序储存在链表中. 与 向量(vectors)相比, 它允许快速的插入和删除,但是随机访问却比较慢. list对象函数 as ...

  7. 【C++】手把手教你写出自己的Stack和Queue类

    在上一篇文章中,我介绍了如何模拟实现 list容器,今天我们来实现 栈(Stack)和队列(Queue). 我将 栈 与队列放置在一起的原因是 这两种数据结构 是十分相似的,将他们放在一起可以相互比较 ...

  8. 【NOIP2011模拟11.1】钓鱼

    [NOIP2011模拟11.1]钓鱼 Description 我们把钓鱼的过程放在坐标系里来考虑.图中蓝色的点为船,初始时它的坐标记为(Ax,y).河深为y,河宽为x.某个时刻会从左边界或右边界游出来 ...

  9. c++ vector用法 入门必看 超详细

    1.vector的作用 vector是最常用的容器之一,功能十分强大,可以储存.管理各种类型的数据.在很多情况下可以用来代替功能比较局限的普通数组,因为我们知道,普通数组只能实现一对一的映射而不能实现 ...

最新文章

  1. 网页中插入VLC播放器播放rtsp视频流步骤
  2. Java新手看招 常用开发工具介绍
  3. 闪存我自己来——HDS公布闪存路线图
  4. Eclipse 工作目录被破坏,导致Eclipse 打不开
  5. php autoload用法,php自动加载__autoload()函数用法
  6. js 数组添加n次相同元素_数组中两次出现相同元素之间的最大距离
  7. 我来重新学习js的面向对象(part 4)
  8. 使用跟踪和调试进行条件编译
  9. 湖南工业大学c语言在线作业答案,湖南工业大学C语言期末考试复习题(机房题库)...
  10. java中qualifier注解怎么写_Java 注解 Qualifier
  11. LabView学习笔记(八):属性节点
  12. 运维,你是选择25k的996还是18k的八小时工作日?
  13. Chrome的历史版本下载
  14. 使用opencv-python读取多个(海康\大华)网络摄像头的视频流,解决实时读取延迟问题
  15. ios原生条形码扫描 效率低下原因
  16. 陈强教授 计量经济学及机器学习等数据集、程序等相关资源
  17. Android build sequence
  18. PV 和 UV 的区别
  19. 第五天学习--存储结构与磁盘划分
  20. iOS中的传感器---摇一摇, 计步器,距离感应,陀螺仪

热门文章

  1. Python学习-基础篇7 网络编程
  2. Node.js的环境搭建
  3. day12_oracle hint——SQL优化过程中常见Oracle中HINT的30个用法
  4. leetcode - Single Number
  5. 结对开发项目:求整数数组中连续子数组和的最大值
  6. 关于Dictionary字典和List列表
  7. ASP.NET MVC 动态选择VIEW
  8. php 二维数组去重
  9. 操作系统实验报告8:进程间通信—消息机制
  10. PHP-代码审计-文件包含