dfs練習(二)

題目:Soldier and Cards

代碼:

#include<bits/stdc++.h>
using namespace std;

const int maxn = 1e5+10;
queue<int>s, t;
map<queue<int>, queue<int> >mp;
int main(){
    int n, k1, k2;
    scanf("%d", &n);
    scanf("%d", &k1);
    for(int i = 1; i <= k1;i++){
        int v;
        scanf("%d", &v);
        s.push(v);
    }
    //if(mp[s] == t)cout<<"jkjk"<<endl;
    scanf("%d", &k2);

    for(int i = 1; i <= k2; i++){
        int v;
        scanf("%d", &v);
        t.push(v);
    }
    mp[s] = t;
    //cout<<s.size()<<" "<<t.size()<<endl;
    int flag = 0;
    int cn = 0;
    while(s.size() != n && s.size() != 0){
        int x, y;
        x = s.front();
        y = t.front();
        s.pop(), t.pop();
        if(x > y){
            s.push(y);
            s.push(x);
        }
        else {
            t.push(x);
            t.push(y);
        }
        cn++;
        if(mp.count(s) && mp[s] == t){//一定要使用mp.count,因爲mp映射的隊列默認位空隊列,所以當s之前沒有出現過,並且t位空的時候使結果出現問題
            flag = 1;
            break;
        }
        mp[s] = t;
    }
    if(flag)printf("-1\n");
    else {
            printf("%d ", cn);
            if(!s.size())printf("2\n");
            else printf("1\n");
    }


return 0;
}

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章