记录编号 |
46956 |
评测结果 |
AAAAAAAAAA |
题目名称 |
[NOI 2001]聪明的打字员 |
最终得分 |
100 |
用户昵称 |
Truth.Cirno |
是否通过 |
通过 |
代码语言 |
C++ |
运行时间 |
4.836 s |
提交时间 |
2012-10-30 07:46:29 |
内存使用 |
13.67 MiB |
显示代码纯文本
#include <iostream>
#include <cstdio>
#include <cstdlib>
#include <queue>
using namespace std;
const short SWAPRUL[2]={1,6};
const short RUL[2]={-1,1};
struct quetype
{
int a[7];
int tim;
};
bool used[7][10][10][10][10][10][10];
bool tar[7][10][10][10][10][10][10];
queue<quetype> que;
void swap(int& a,int& b)
{
int temp;
temp=a;
a=b;
b=temp;
}
int main(void)
{
freopen("clever.in","r",stdin);
freopen("clever.out","w",stdout);
quetype a,b;
int i;
for (i=1;i<=6;i++)
scanf("%1d",&a.a[i]);
a.a[0]=1;
a.tim=0;
used[a.a[0]][a.a[1]][a.a[2]][a.a[3]][a.a[4]][a.a[5]][a.a[6]]=true;
que.push(a);
for (i=1;i<=6;i++)
scanf("%1d",&b.a[i]);
for (i=1;i<=6;i++)
tar[i][b.a[1]][b.a[2]][b.a[3]][b.a[4]][b.a[5]][b.a[6]]=true;
if (tar[a.a[0]][a.a[1]][a.a[2]][a.a[3]][a.a[4]][a.a[5]][a.a[6]])
{
printf("0\n");
return(0);
}
while (!que.empty())
{
a=que.front();
for (i=0;i<2;i++)
{
if (a.a[0]!=SWAPRUL[i])
if (a.a[a.a[0]]!=a.a[SWAPRUL[i]])
{
b=a;
swap(b.a[b.a[0]],b.a[SWAPRUL[i]]);
if (!used[b.a[0]][b.a[1]][b.a[2]][b.a[3]][b.a[4]][b.a[5]][b.a[6]])
{
b.tim++;
if (tar[b.a[0]][b.a[1]][b.a[2]][b.a[3]][b.a[4]][b.a[5]][b.a[6]])
{
printf("%d\n",b.tim);
return(0);
}
used[b.a[0]][b.a[1]][b.a[2]][b.a[3]][b.a[4]][b.a[5]][b.a[6]]=true;
que.push(b);
}
}
}
for (i=0;i<2;i++)
{
if (a.a[a.a[0]]+RUL[i]>=0&&a.a[a.a[0]]+RUL[i]<=9)
{
b=a;
b.a[b.a[0]]+=RUL[i];
if (!used[b.a[0]][b.a[1]][b.a[2]][b.a[3]][b.a[4]][b.a[5]][b.a[6]])
{
b.tim++;
if (tar[b.a[0]][b.a[1]][b.a[2]][b.a[3]][b.a[4]][b.a[5]][b.a[6]])
{
printf("%d\n",b.tim);
return(0);
}
used[b.a[0]][b.a[1]][b.a[2]][b.a[3]][b.a[4]][b.a[5]][b.a[6]]=true;
que.push(b);
}
}
}
for (i=0;i<2;i++)
{
if (a.a[0]+RUL[i]>=1&&a.a[0]+RUL[i]<=6)
{
b=a;
b.a[0]+=RUL[i];
if (!used[b.a[0]][b.a[1]][b.a[2]][b.a[3]][b.a[4]][b.a[5]][b.a[6]])
{
b.tim++;
used[b.a[0]][b.a[1]][b.a[2]][b.a[3]][b.a[4]][b.a[5]][b.a[6]]=true;
que.push(b);
}
}
}
que.pop();
}
return(0);
}