码迷,mamicode.com
首页 > 其他好文 > 详细

546C. Soldier and Cards

时间:2015-08-10 23:45:28      阅读:148      评论:0      收藏:0      [点我收藏+]

标签:

题目链接

题意

两个人玩扑克,共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

标签:

原文地址:http://www.cnblogs.com/theskulls/p/4719364.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!