0w1

CFR 546 C. Soldier and Cards ( 狀態記錄 )

http://codeforces.com/contest/546/problem/C
水。

#include <bits/stdc++.h>
using namespace std;
const int MAXN = 10 + 2;

int n;
deque< int > dq1, dq2;

typedef pair< deque< int >, deque< int > > pdq;
set< pdq > vis;

void solve(){
    int rnd_cnt = 0;
    while( !dq1.empty() && !dq2.empty() ){
        ++rnd_cnt;
        if( vis.count( pdq( dq1, dq2 ) ) ){
            rnd_cnt = -1;
            break;
        }
        vis.insert( pdq( dq1, dq2 ) );
        int c1 = dq1.front(); dq1.pop_front();
        int c2 = dq2.front(); dq2.pop_front();
        if( c1 > c2 ){
            dq1.push_back( c2 );
            dq1.push_back( c1 );
        } else{
            dq2.push_back( c1 );
            dq2.push_back( c2 );
        }
    }
    if( rnd_cnt == -1 ) puts("-1");
    else printf("%d %d\n", rnd_cnt, dq1.empty() ? 2 : 1);
}

int main(){
    scanf("%d", &n);
    int k1; scanf("%d", &k1);
    for(int i = 0; i < k1; ++i){
        int v; scanf("%d", &v);
        dq1.push_back( v );
    }
    int k2; scanf("%d", &k2);
    for(int i = 0; i < k2; ++i){
        int v; scanf("%d", &v);
        dq2.push_back( v );
    }
    solve();
    return 0;
}