比赛 20120217 评测结果 WWWWWWWW
题目名称 分球 最终得分 0
用户昵称 苏轼 运行时间 0.000 s
代码语言 C++ 内存使用 0.00 MiB
提交时间 2012-02-17 21:54:19
显示代码纯文本
#include<iostream>
#include<cstdio>
#include<cstdlib>
#include<cstring>
using namespace std;
int n,m,t,we;
int w[20],answer=200,an;
struct hehe
{
	int pai;
	int a[20];
	int len;
}q[1000000];
void breadth();
void clear();
void bfs(int x);
bool check(int x);
int main()
{
	freopen ("balls.in","r",stdin);
	freopen ("balls.out","w",stdout);
	cin>>n;
	for (int i=0;i<n;i++)
	{
		cin>>m;
		char a[20];
		cin>>a;
		if (strlen(a)==2*m-2)
		{
			for (int j=0;j<2*m-2;j++)
			{
				if (a[j]=='a')
					w[j]=1;
				else
					w[j]=2;
			}
			w[2*m-1]=0;
		}
		else
		{
			for (int j=0;j<strlen(a);j++)
			{
				if (a[j]=='a')
					w[j]=1;
				else
					w[j]=2;
			}
			int lq;
			lq=strlen(a);
			w[strlen(a)]=0;
			cin>>a;
			for (int j=lq+1;j<lq+strlen(a);j++)
			{
				if (a[j-lq]=='a')
					w[j]=1;
				else
					w[j]=2;
			}
		}
		breadth();
		if (answer==200)
			cout<<"NO SOLUTION"<<endl;
		answer=200;
	}
	return 0;
}
void breadth()
{
	clear();
	for (int i=0;i<2*m;i++)
	{
		q[1].a[i]=w[i];
	}
	while (t<=we)
	{
		bfs(t);
		t++;
	}
}
void clear()
{
	t=1;
	we=1;
	q[1].pai=-1;
	q[1].len=0;
}

void bfs(int x)
{
	for (int i=0;i<m+1;i++)
	{
		if (i==m)
		{
			if(q[x].len<answer)
			{
				answer=q[x].len;
				an=x;
			}
		}
		if (q[x].a[i]==2)
			break;
	}
	if (an==x)
		return;
	int ling;
	for (int i=0;i<2*m;i++)
	{
		if (q[x].a[i]==0)
		{
			ling=i;
			break;
		}
	}
	for (int i=0;i<2*m;i++)
	{
		if(q[x].a[i]=0&&q[x].a[i+1]!=0)
		{
			int o,p;
			o=q[x].a[i];
			p=q[x].a[i+1];
			for (int j=0;j<2*m;j++)
			{
				q[x+1].a[j]=q[x].a[j];
			}
			q[x+1].a[i]=0;
			for (int j=i+1;j<2*m-1;j++)
			{
				q[x+1].a[j]=q[x+1].a[j+1];
			}
			for (int j=2*m-1;j>ling;j--)
			{
				q[x+1].a[j]=q[x+1].a[j-1];
			}
			q[x+1].a[ling]=o;
			q[x+1].a[ling+1]=p;
			if (check(x+1))
			{
				we++;
				continue;
			}
			else
				continue;
		}
	}
}

bool check(int x)
{
	for (int i=0;i<x;i++)
	{
		for (int j=0;j<2*m;j++)
		{
			if (q[x].a[j]==q[i].a[j])
			{
				return false;
			}
		}
	}
	return true;
}