Soldiers and cards

题目链接:http://acm.hust.edu.cn/vjudge/contest/view.action?cid=83498#problem/B

题意:

       士兵两两之间进行打牌游戏,出牌有规定:双方从首牌依次出起,每一次出的两只牌牌面进行比较,面值大的一方,两只牌归其所有,不过收牌有一定要求,即两只牌要放在自己牌面底端,且先插入对方所出牌面,再插入己方牌面,问:给出双方牌面,判断能否产生输赢,产生输赢后出了几次牌,而谁又能赢?

       输入要求:首行输入总牌数,第二行输入士兵甲拥有的牌的数目及每只牌的面值(用空格符分隔),第三行输入士兵乙拥有的牌的数目及每只牌的面值(用空格符分隔);

       输出要求:不能产生输赢则直接输出'-1’,否则单行输出出牌次数和赢家(用空格符分隔)。
案例:

              Input
        4

2 1 3
2 4 2
             Output
        6 2
              Input
        3

1 2
2 1 3
             Output
       -1



图示: 案例一:

案例二:

    
分析:
这是一个队列问题,可将双方牌面设为两个队列,每一次进行队首元素的比较,入队采用push语句,任一队列为空即结束游戏。具体思路见源代码注释。

  源代码:

 1 #include<cstdio>
 2 #include<queue>//队列的头文件声明
 3 using namespace std;
 4 int main()
 5 {
 6     int n,k1,k2,i,m,p1,p2,count,test;
 7     while(scanf("%d",&n)!=EOF)
 8     {   queue<int> q1,q2;//建立两个队列
 9         count=0;
10         scanf("%d",&k1);
11         for(i=0;i<k1;i++)//队列q1:元素入队
12         {    scanf("%d",&m);
13             q1.push(m);
14         }
15         scanf("%d",&k2);
16         for(i=0;i<k2;i++)//队列q2:元素入队
17         {   scanf("%d",&m);
18             q2.push(m);
19         }
20         while(1)    
21     {    if(q1.empty()||q2.empty())//任一队列为空,结束游戏
22         {   test=1;//游戏出牌有限次后结束判别语句
23             break;
24         }
25         else
26         {   p1=q1.front();//队列q1首牌数值
27             p2=q2.front();//队列q2首牌数值
28             q1.pop();//队列q1出首牌
29             q2.pop();//队列q2出首牌
30             if(p1>p2)//牌面面值比较
31             {  q1.push(p2);//队1赢,两只牌依次入队1
32                q1.push(p1);
33             }
34             else
35             {  q2.push(p1);//队2赢,两只牌依次入队2
36                q2.push(p2);
37             }
38             count++;//出牌次数
39             if(count==1e4)//游戏无限循环,无输赢结束判别语句
40             {   test=0;
41                 break;
42             }
43         }
44     }
45         if(test)//判断能否产生输赢
46             printf("%d %d\n",count,q1.empty()?2:1);//判别赢家
47         else printf("-1\n");        
48     }
49     return 0;
50 }

 

posted @ 2015-07-25 15:28  ~瞬间*  阅读(169)  评论(0编辑  收藏  举报