题目链接:http://codeforces.com/contest/546/problem/C
题目意思:1和2两个人分别有k1,k2张牌,分别去除最前面一张比较,不存在相同的牌,如果1胜那么先将2出的牌放入自己牌最后面,再把自己出的牌放入最后面。反复操作,最后如果有一人没牌那么比赛结束,输出进行了几次比赛和谁胜利。如果分不出胜负输出-1。
分析:模拟比赛规则。
#include <iostream> #include <cstdio> #include <algorithm> #include <map> #include <cstring> #include <queue> using namespace std; int a1[15]; int a2[15]; int main() { int n,n1,n2; while(scanf("%d",&n)!=EOF) { queue<int>q1; queue<int>q2; scanf("%d",&n1); for(int i=0;i<n1;i++) { scanf("%d",&a1[i]); q1.push(a1[i]); } scanf("%d",&n2); for(int i=0;i<n2;i++) { scanf("%d",&a2[i]); q2.push(a2[i]); } int k=0,flag=0; int x1,x2; while(1) { if(q1.empty()||q2.empty()) break; x1=q1.front(); q1.pop(); x2=q2.front(); q2.pop(); if(x1<x2) { q2.push(x1); q2.push(x2); } else { q1.push(x2); q1.push(x1); } k++; if(k>10000) { printf("-1 "); flag=1; break; } } if(flag==0) { if(q1.size()) printf("%d %d ",k,1); else printf("%d %d ",k,2); } } return 0; }