題目: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;
}