Codeforces Round #304 (Div. 2) C.Soldier and Cards
题意:
有 n 张牌(从1到n),分给两个人第一个人 k1 张,剩下的 k2 张给另一个人(输入的顺序为从上到下)。两个人开始做游戏,每人从自己的牌抽最上边的那张,比较大小,谁的牌大这两张牌就归谁(先把赢来的那张牌放在所有牌下边,在把自己的那张牌放在最下边)。直到有一个人的牌全输光,另一个人才算赢。输出一共做了几次游戏 和 第几个人赢了。如果游戏不可能结束那么输出 -1。
思路:
用两个队列模拟就行
import java.util.*;
public class Main {
public static void main(String[] args) {
// TODO Auto-generated method stub
Scanner cin = new Scanner(System.in);
Queue<Integer> q1 = new LinkedList<Integer>();
Queue<Integer> q2 = new LinkedList<Integer>();
int n = cin.nextInt();
int k = cin.nextInt();
for(int i=0;i<k;i++)
{
int a = cin.nextInt();
q1.add(a);
}
k = cin.nextInt();
for(int i=0;i<k;i++)
{
int a = cin.nextInt();
q2.add(a);
}
int m = 0; //游戏次数
int a = 0,b = 0;
int flag = 0; //第几个人赢了
while(true)
{
if(q1.isEmpty())
{
flag = 2;
break;
}
else if(q2.isEmpty())
{
flag = 1;
break;
}
a = q1.poll();
b = q2.poll();
if(a>b)
{
q1.add(b);
q1.add(a);
}
else if(a<b)
{
q2.add(a);
q2.add(b);
}
m++;
if(m>=1e6)
break;
}
if(flag==0)
System.out.println("-1");
else if(flag==1)
System.out.println(m+" "+flag);
else if(flag==2)
System.out.println(m+" "+flag);
}
}