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; }