标签:
题意
两个人玩扑克,共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()
标签:
原文地址:http://www.cnblogs.com/theskulls/p/4719364.html