题目链接

题意

两个人玩扑克,共n张牌,第一个人k1张,第二个人k2张

给定输入的牌的顺序就是出牌的顺序

每次分别比较两个人牌的第一张,牌上面数字大的赢,把这两张牌给赢的人,并且大的牌放在这个人的牌最下面,另外一张放在上面牌的上面,其他牌在放在这两张牌的上面。

求要pk多少次结束游戏,并记录赢得是哪个人

若出现死循环的情况输出 –1

 

这里可以根据栈或队列

java的程序是根据栈的,比较时候取出栈顶,加入新的两个 数的时候,要先出栈,在入栈,有点麻烦

Python程序是根据队列,在头取出进行比较,加入时候再队尾加入元素,不会出现过度的入栈和出栈的操作

Java 的有增加了队列实现

ArrayList可实现队列的功能,比较简单了

Java程序

import java.awt.List;
import java.io.PrintStream;
import java.util.ArrayList;
import java.util.Scanner;
import java.util.Stack; public class C546 {
static void run1(){
Scanner in =new Scanner(System.in);
PrintStream out = System.out;
int n = in.nextInt();
int Maxtime =1000;
ArrayList<Integer> l1 = new ArrayList<Integer>();
ArrayList<Integer> l2 = new ArrayList<Integer>();
int k1 = in.nextInt();
for(int i=1;i<=k1;i++) l1.add(in.nextInt());
int k2 = in.nextInt();
for(int i=1;i<=k2;i++) l2.add(in.nextInt());
int count =0;
while(l1.size()>0 && l2.size()>0 &&Maxtime>0){
count++;
Maxtime--;
int q1 = l1.get(0);
int q2 = l2.get(0);
l1.remove(0);
l2.remove(0);
if(q1> q2){
l1.add(q2);
l1.add(q1);
}else{
l2.add(q1);
l2.add(q2);
}
}
if(Maxtime==0)
out.println(-1);
else
out.println(count+" "+(l1.size()>0?1:2));
}
static void run(){
Scanner in = new Scanner(System.in);
PrintStream out = System.out;
int n = in.nextInt();
int k1 = in.nextInt();
Stack s1 = new Stack();
Stack s2 = new Stack();
int[] a1 = new int[k1];
for(int i=0;i<k1;i++)
a1[i] = in.nextInt();
int k2 = in.nextInt();
int[] a2 = new int[k2];
for(int i=0;i<k2;i++){
a2[i] = in.nextInt();
}
for(int i=k1-1;i>=0;i--)
s1.push(a1[i]);
for(int i=k2-1;i>=0;i--)
{s2.push(a2[i]);
}
int Maxtime = 10000;
int count = 0;
boolean flag = false;
while(! s1.isEmpty() && ! s2.isEmpty() && Maxtime>0){
int p1 = (Integer) s1.pop();
int p2 = (Integer) s2.pop();
if(p1<p2){
int[] a3 = new int[s2.size()+2]; for(int i=0;i<a3.length-2;i++)
a3[i] = (Integer) s2.pop();
a3[a3.length-2] = p1;
a3[a3.length-1] = p2;// max
for(int i= a3.length-1;i>=0;i--)
{
s2.add(a3[i]);
}
count++;
}else{
int[] a4 = new int[s1.size()+2]; for(int i=0;i<a4.length-2;i++)
a4[i] = (Integer) s1.pop();
a4[a4.length-2] = p2;
a4[a4.length-1] = p1; // max
for(int i= a4.length-1;i>=0;i--)
s1.add(a4[i]);
count++;
}
Maxtime--; }
if(Maxtime==0)
System.out.println(-1);
else if(s1.isEmpty())
System.out.println(count+" "+2);
else
out.println(count+" "+ 1);
}
public static void main(String[] args){
// run(); run1();
}
}

Python 程序

def C546():

     n = int(raw_input())

     l=lambda:map(int,raw_input().split())

     a = l()[1:]

     b = l()[1:]

     c = 0

     R = set()

     while a and b:

         c +=1

         A = a.pop(0)

         B = b.pop(0)

         if A > B:

             a+=[B,A]

         else:

             b+=[A,B]

         r =(tuple(a),tuple(b))

         if r in R :

             print -1

             exit(0)

         R.add(r)

     print c, 1 if a else 2

    
if __name__=='__main__':

    #A546()

    #B546()

    C546()

546C. Soldier and Cards的更多相关文章

  1. cf 546C Soldier and Cards

    题目链接:C. Soldier and Cards Two bored soldiers are playing card war. Their card deck consists of exact ...

  2. 【CodeForces - 546C】Soldier and Cards (vector或队列)

    Soldier and Cards 老样子,直接上国语吧  Descriptions: 两个人打牌,从自己的手牌中抽出最上面的一张比较大小,大的一方可以拿对方的手牌以及自己打掉的手牌重新作为自己的牌, ...

  3. 【codeforces 546C】Soldier and Cards

    time limit per test2 seconds memory limit per test256 megabytes inputstandard input outputstandard o ...

  4. 队列 Soldier and Cards

    Soldier and Cards 题目: Description Two bored soldiers are playing card war. Their card deck consists ...

  5. CF Soldier and Cards (模拟)

    Soldier and Cards time limit per test 2 seconds memory limit per test 256 megabytes input standard i ...

  6. 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 ...

  7. Codeforces Round #304 (Div. 2) C. Soldier and Cards —— 模拟题,队列

    题目链接:http://codeforces.com/problemset/problem/546/C 题解: 用两个队列模拟过程就可以了. 特殊的地方是:1.如果等大,那么两张牌都丢弃 : 2.如果 ...

  8. C - Soldier and Cards

    Time Limit:2000MS     Memory Limit:262144KB     64bit IO Format:%I64d & %I64u Description Two bo ...

  9. queue+模拟 Codeforces Round #304 (Div. 2) C. Soldier and Cards

    题目传送门 /* 题意:两堆牌,每次拿出上面的牌做比较,大的一方收走两张牌,直到一方没有牌 queue容器:模拟上述过程,当次数达到最大值时判断为-1 */ #include <cstdio&g ...

随机推荐

  1. Bundle、Intent、SharedPreferences

    Intent与Bundle的共同点:都继承Parcelable Intent传值与Bundle传值的区别 eg:我现在要从A界面   跳转到B界面或者C界面   这样的话 我就需要写2个Intent  ...

  2. 例题6-7 Trees on the level ,Uva122

    本题考查点有以下几个: 对数据输入的熟练掌握 二叉树的建立 二叉树的宽度优先遍历 首先,特别提一下第一点,整个题目有相当一部分耗时在了第一个考查点上(虽然有些不必要,因为本应该有更简单的方法).这道题 ...

  3. rinetd 安装使用

    1 下载解压: wget http://www.boutell.com/rinetd/http/rinetd.tar.gz tar zxvf rinetd.tar.gz 2 手动建立目录 mkdir ...

  4. eclipse,myeclipse svn 和jadclipse 反编译插件 及安装

    插件下载链接:http://download.csdn.net/download/mmyzlinyingjie/6456785 myeclipse svn 安装: 把svn解压,然后把这个文件夹放在m ...

  5. 第一次比赛的 C题 (好后面才补的....) CodeForces 546B

    Description Colonel has n badges. He wants to give one badge to every of his n soldiers. Each badge ...

  6. Jira 6.0.3 安装与破解

    如果你还没有使用Jira做项目跟踪与管理,那就赶紧试用一下吧.下面教你一步一步安装Jira 6.0.3,以及如何破解试用版. 一. 安装准备   1. 去Jira官方网站下载http://www.at ...

  7. JAVA类与对象(二)----类定义基础

    类是组成java程序的基本要素,是java中的一种重要的复合数据类型.它封装了一类对象的状态和方法,是这一类对象的原型.一个类的实现包括两个部分:类声明和类体,基本格式: class <clas ...

  8. LintCode-Compare Strings

    Compare two strings A and B, determine whether A contains all of the characters in B. The characters ...

  9. ?--Porg.springframework.beans.MethodInvocationException: Property 'username' threw exception; nested exception is java.lang.NullPointerException

    使用BoneCP作为连接池,在启动Tomcat报出以下异常: 一月 02, 2016 2:12:17 下午 org.apache.tomcat.util.digester.SetPropertiesR ...

  10. BZOJ 4341 [CF253 Printer] 解题报告

    乍一看这个题好像可以二分优先度搞搞... 实际上能不能这么搞呢...? 我反正不会... 于是开始讲我的乱搞算法: 首先肯定要把任务按照优先度排序. 用一棵在线建点的线段树维护一个时刻是否在工作. 然 ...