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