比赛 20121108 评测结果 TTAEEAEEAA
题目名称 造房子的学问 最终得分 40
用户昵称 Cloud 运行时间 2.303 s
代码语言 C++ 内存使用 3.40 MiB
提交时间 2012-11-08 09:19:45
显示代码纯文本
#include<fstream>
#include<queue>
using namespace std;
struct yu
{
	int l;
	int ans;
};
queue<yu> dq;
yu tmp;
int f[32768];
int main(void)
{
	ifstream fin("wood.in");
	ofstream fout("wood.out");
	int m;
	int a[3];
	int r;
	int i;
	fin>>tmp.l>>m;
	fin>>a[0]>>a[1]>>a[2];
	fin>>r;
	dq.push(tmp);
	while(dq.size())
	{
		tmp=dq.front();
		if(tmp.l==m)
		{
			fout<<tmp.ans;
			return 0;
		}
		for(i=0;i<3;i++)
		{
			tmp=dq.front();
			tmp.ans++;
			tmp.l+=a[i];
			if(f[tmp.l]&&f[tmp.l]<tmp.ans)
				continue;
			f[tmp.l]=tmp.ans;
			dq.push(tmp);
		}
		tmp=dq.front();
		tmp.ans++;
		tmp.l-=r;
		if(!(f[tmp.l]&&f[tmp.l]<tmp.ans))
		{
			f[tmp.l]=tmp.ans;
			dq.push(tmp);
		}
		tmp.l=r;
		if(!(f[tmp.l]&&f[tmp.l]<tmp.ans))
		{
			f[tmp.l]=tmp.ans;
			dq.push(tmp);
		}
		tmp=dq.front();
		tmp.l/=2;
		tmp.ans++;
		if(!(f[tmp.l]&&f[tmp.l]<tmp.ans))
		{
			f[tmp.l]=tmp.ans;
			dq.push(tmp);
		}
		dq.pop();
	}
	fout<<"No solution";
	fin.close();
	fout.close();
	return 0;
}