zoukankan      html  css  js  c++  java
  • 546C. Soldier and Cards

    题目链接

    题意

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

  • 相关阅读:
    07hibernate_one2one_ufk_1
    05hibernate_one2one_pk_1(forget)
    01hibernate_first
    蜂蜜 与 营养
    06hibernate_one2one_pk_2(you can forget)
    DLL,DML,DCL,TCL in Oracle
    04hibernate_many2one_cascade
    02hibernate_session
    03hibernate_basemapping_uuid_native_assigned
    各地工资水平
  • 原文地址:https://www.cnblogs.com/theskulls/p/4719364.html
Copyright © 2011-2022 走看看