比赛 20121108 评测结果 AAAAAAAAAA
题目名称 造房子的学问 最终得分 100
用户昵称 feng 运行时间 0.023 s
代码语言 C++ 内存使用 3.83 MiB
提交时间 2012-11-08 11:11:40
显示代码纯文本
#include<cstring>
#include<cstdio>
#include<algorithm>
#include<iostream>
using namespace std;
int n,m,i,a,b,c,l,tmp,head,tail,x;
int queue[100000];
int ans[40000];
int f[40000];
void pushin(int x,int tmp){
	if (x>0)
	if (ans[x]>tmp && f[x]){
		queue[++tail]=x;
		f[x]=false;
		ans[x]=tmp;
	}
}
int main()
{
	freopen("wood.in","r",stdin);
	freopen("wood.out","w",stdout);
	scanf("%d%d%d%d%d%d",&n,&m,&a,&b,&c,&l);
	memset(f,true,sizeof(f));
	memset(ans,0x7f,sizeof(ans));
	queue[1]=n;
	f[n]=false;
	ans[n]=0;
	head=1;
	tail=1;
	while (head<=tail){
		x=queue[head];
		f[x]=true;
		tmp=x+a;
		pushin(tmp,ans[x]+1);
		tmp=x+b;
		pushin(tmp,ans[x]+1);
		tmp=x+c;
		pushin(tmp,ans[x]+1);
		tmp=x-l;
		pushin(tmp,ans[x]+1);
		tmp=l;
		pushin(tmp,ans[x]+1);
		tmp=x/2;
		pushin(tmp,ans[x]+1);
		head++;
	}
	if (ans[m]==ans[0]) printf("No solution.");
	else printf("%d",ans[m]);
	return 0;
}