记录编号 |
49504 |
评测结果 |
AAAAAAAAAA |
题目名称 |
造房子的学问 |
最终得分 |
100 |
用户昵称 |
苏轼 |
是否通过 |
通过 |
代码语言 |
C++ |
运行时间 |
0.029 s |
提交时间 |
2012-11-08 12:08:49 |
内存使用 |
3.31 MiB |
显示代码纯文本
#include<iostream>
#include<cstdio>
#include<cstdlib>
#include<queue>
#include<utility>
#include<algorithm>
using namespace std;
int n,m,f[3],l,tmp;
bool used[33000]={0};
queue<pair<int,int> >q;
pair<int,int>temp;
void bfs();
int main()
{
freopen ("wood.in","r",stdin);
freopen ("wood.out","w",stdout);
cin>>n>>m>>f[0]>>f[1]>>f[2]>>l;
if (n==m)
{
cout<<0;
return 0;
}
used[n]=1;
bfs();
cout<<"No solution.";
return 0;
}
void bfs()
{
temp.first=n;
temp.second=0;
q.push(temp);
while (!q.empty())
{
for (int i=0;i<3;i++)
{
tmp=q.front().first+f[i];
if (!used[tmp]&&tmp<=32767&&tmp>0)
{
used[tmp]=1;
temp.first=tmp;
temp.second=q.front().second+1;
q.push(temp);
}
if (tmp==m)
{
cout<<temp.second;
exit(0);
}
}
tmp=q.front().first;
tmp/=2;
if (!used[tmp]&&tmp>0&&tmp<=32767)
{
used[tmp]=1;
temp.first=tmp;
temp.second=q.front().second+1;
q.push(temp);
if (tmp==m)
{
cout<<temp.second;
exit(0);
}
}
tmp=q.front().first;
if (tmp>l&&!used[l]&&tmp>0&&tmp<=32767&&l!=0)
{
used[l]=1;
temp.first=l;
temp.second=q.front().second+1;
q.push(temp);
if (tmp==m)
{
cout<<temp.second;
exit(0);
}
}
if (tmp>l&&!used[tmp-l]&&tmp>0&&tmp<=32767)
{
used[tmp-l]=1;
temp.first=tmp-l;
temp.second=q.front().second+1;
q.push(temp);
if (tmp==m)
{
cout<<temp.second;
exit(0);
}
}
q.pop();
}
}