[CF546C] Soldier and Cards - 模拟

两个人玩牌,首先两个人都拿出自己手牌的最上面的进行拼点,两张拼点牌将都给拼点赢得人,这两张牌放入手牌的顺序是:先放对方的牌再放自己的。若最后有一个人没有手牌了,那么他就输了,求输出拼点的次数和赢得人的编号,如果一直无法结束比赛,则输出-1.

用队列模拟即可。

#include <bits/stdc++.h>
using namespace std;
#define int long long
#define ll long long
#define reset(x) memset(x,0,sizeof x)
#define reset3f(x) memset(x,0x3f,sizeof x)

queue <int> a,b;
int n;

signed main() {
    cin>>n;
    cin>>n;
    for(int i=1;i<=n;i++) {
        int t;
        cin>>t;
        a.push(t);
    }
    cin>>n;
    for(int i=1;i<=n;i++) {
        int t;
        cin>>t;
        b.push(t);
    }
    for(int i=1;i<=1e+6;i++) {
        int p=a.front(), q=b.front();
        a.pop(); b.pop();
        int flag=0;
        if(p>q) {
            a.push(q);
            a.push(p);
            flag=1;
        }
        else {
            b.push(p);
            b.push(q);
            flag=2;
        }
        if(a.size()==0 || b.size()==0) {
            cout<<i<<" "<<flag<<endl;
            return 0;
        }
    }
    cout<<-1;
}

猜你喜欢

转载自www.cnblogs.com/mollnn/p/12304144.html