博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
CF 546C Soldier and Cards
阅读量:5113 次
发布时间:2019-06-13

本文共 3229 字,大约阅读时间需要 10 分钟。

Describe

Two bored soldiers are playing card war. Their card deck consists of exactly n cards, numbered from 1 to n, all values are different. They divide cards between them in some manner, it's possible that they have different number of cards. Then they play a "war"-like card game.

The rules are following. On each turn a fight happens. Each of them picks card from the top of his stack and puts on the table. The one whose card value is bigger wins this fight and takes both cards from the table to the bottom of his stack. More precisely, he first takes his opponent's card and puts to the bottom of his stack, and then he puts his card to the bottom of his stack. If after some turn one of the player's stack becomes empty, he loses and the other one wins.

You have to calculate how many fights will happen and who will win the game, or state that game won't end.

Input

First line contains a single integer n (2 ≤ n ≤ 10), the number of cards.

Second line contains integer k1 (1 ≤ k1 ≤ n - 1), the number of the first soldier's cards. Then follow k1 integers that are the values on the first soldier's cards, from top to bottom of his stack.

Third line contains integer k2 (k1 + k2 = n), the number of the second soldier's cards. Then follow k2 integers that are the values on the second soldier's cards, from top to bottom of his stack.

All card values are different.

Output

If somebody wins in this game, print 2 integers where the first one stands for the number of fights before end of game and the second one is 1 or 2 showing which player has won.

If the game won't end and will continue forever output  - 1.

Sample test(s)

Input

4 2 1 3 2 4 2

Output

6 2

Input

3 1 2 2 1 3

Output

-1

Div2 C, 模拟

CODE:

#include 
#include
#include
#include
#define REP(i, s, n) for(int i = s; i <= n; i ++)#define REP_(i, s, n) for(int i = n; i >= s; i --)#define MAX_N 10 + 5using namespace std;int n;int aa[MAX_N], bb[MAX_N];int a[1000000], b[1000000];int main(){ scanf("%d", &n); int sum_a, sum_b; scanf("%d", &sum_a); REP(i, 1, sum_a) scanf("%d", &aa[i]), a[i] = aa[i]; scanf("%d", &sum_b); REP(i, 1, sum_b) scanf("%d", &bb[i]), b[i] = bb[i]; int ok = 0, num = 0; int ha = 1, ea = sum_a, hb = 1, eb = sum_b; while(ok == 0){ int tmp1 = a[ha], tmp2 = b[hb]; ha ++, hb ++; num ++; if(tmp1 > tmp2){ a[++ ea] = tmp2, a[++ ea] = tmp1; } else { b[++ eb] = tmp1, b[++ eb] = tmp2;} if(ha > ea){ok = 2; break;} else if(hb > eb){ ok = 1; break;} else if(ea - ha + 1 == sum_a && eb - hb + 1 == sum_b){ bool cnt = 1; for(int i = ha, j = 1; j <= sum_a; i ++, j ++) if(a[i] != aa[j]){ cnt = 0; break; } for(int i = hb, j = 1; j <= sum_b; i ++, j ++) if(b[i] != bb[j]){ cnt = 0; break; } if(cnt) ok = 4; } if(num > 1000000){ok = 4; break;} } if(ok == 4) printf("-1\n"); else if(ok == 2) printf("%d %d", num, ok); else if(ok == 1) printf("%d %d", num, ok); return 0;}

 

转载于:https://www.cnblogs.com/ALXPCUN/p/4545846.html

你可能感兴趣的文章
java集合: List、Set、Map总结 + HashMap/Hashtable 差别
查看>>
设计一个线程安全的单例(Singleton)模式
查看>>
Codeforces Round #257 (Div. 2) C. Jzzhu and Chocolate
查看>>
面向对象中private理解
查看>>
Ubuntu 安装 配置 Mysql
查看>>
第十九课 调整色阶
查看>>
thinkphp--多个id查询
查看>>
MFC修改窗口无标题和标题信息,修改执执行文件图标
查看>>
POJ 2117 Electricity 割点 Tarjan算法
查看>>
静态链表
查看>>
程序流程图画法复习
查看>>
if not用法
查看>>
xamarin.forms 主明细界面
查看>>
字符串的碎片整理。。。
查看>>
python pymysql安装
查看>>
再谈组合模式
查看>>
两分钟学会Android平台NDK编程(无须Eclipse和cygwin,可使用命令行打包多个so)
查看>>
QT布局
查看>>
Linux字符设备驱动
查看>>
移动端页面开发通用问题解决方案
查看>>