Решение задачи Солдат и карты с Codeforces

Без пояснения   Просмотров: 25


Два скучающих солдата играют в карточную войну (эквивалент карточной игры «пьяница» в англоязычных странах). Их колода состоит ровно из n карт, пронумерованных различными числами от 1 до n. Исходно они делят между собой картны некоторым образом, возможно, не равным образом.

Правила игры следующие. На каждом ходу происходит сражение. Каждый игрок берет карту с вершины своей стопки и кладет на стол. Тот, у кого значение карты больше, выигрывает в этом сражении, берет обе карты со стола и кладет в низ своей стопки. Точнее говоря, сперва он берет карту противника и кладет в низ своей стопки, затем кладет свою карту в низ своей стопки. Если после какого-то хода стопка одного игрока становится пустой, то он проигрывает, а другой игрок побеждает.

Вам надо подсчитать, после сколько будет сражений и кто победит, в противном случае надо сказать, что игра не прекратится.

Код

#include<bits/stdc++.h>
using namespace std;
const int inf=4e7;
int n,mx,ans,j,ka,kb,a,b;
queue<int> qa,qb;
int main()
{
	cin>>n>>ka;
	for(int i=0;i<ka;i++)
	{
		cin>>kb;
		if(kb>mx)
		{
			mx=kb;
			ans=1;
		}
		qa.push(kb);
	}
	cin>>kb;
	for(int i=0;i<kb;i++)
	{
		cin>>ka;
		if(ka>mx)
		{
			mx=ka;
			ans=2;
		}
		qb.push(ka);
	}
	while(j<inf&&!qa.empty()&&!qb.empty())
	{
		a=qa.front(); b=qb.front();
		if(a>b)
		{
			qa.push(b);
			qa.push(a);
		}
		else
		{
			qb.push(a);
			qb.push(b);

		}
		qa.pop(); qb.pop();
		j++;
	}
	if(j==inf)
		cout<<-1;
	else
		cout<<j<<' '<<ans;
	return 0;
}

         

Администратор Photo Автор: Администратор



Комментарии

Чтобы написать комментарии вам нужно войти в систему или зарегистрироваться