比赛 20121108 评测结果 AAAAAAAAAA
题目名称 造房子的学问 最终得分 100
用户昵称 怡红公子 运行时间 0.012 s
代码语言 C++ 内存使用 10.93 MiB
提交时间 2012-11-08 11:43:06
显示代码纯文本
#include<iostream>
#include<cstring>
#include<cstdio>
#include<cstdlib>
#include<fstream>
using namespace std;
ifstream fin("wood.in");
ofstream fout("wood.out");

int n,m,d,a[4];
struct Q{int t,l;}q[1000000];
bool v[32768]={0};

int main()
{
    fin>>n>>m;
    fin>>a[1]>>a[2]>>a[3];
    fin>>d;
    
    q[0].t=0;q[0].l=n;v[n]=1;
    int l=0,r=0;
    
    while(l<=r)
    {
      if(q[l].l==m) {fout<<q[l].t<<endl;return 0;}//system("pause");
      if(q[l].l/2!=0&&!v[q[l].l/2]) {v[q[l].l/2]=1;q[++r].t=q[l].t+1;q[r].l=q[l].l/2;}
      if(q[l].l-d!=0&&!v[q[l].l-d]) {v[q[l].l-d]=1;q[++r].t=q[l].t+1;q[r].l=q[l].l-d;}         
      if(d!=0&&!v[d]) {v[d]=1;q[++r].t=q[l].t+1;q[r].l=d;}   
      for(int i=1;i<=3;++i)
      if(q[l].l+a[i]<=32767&&!v[q[l].l+a[i]]) 
      {v[q[l].l+a[i]]=1;q[++r].t=q[l].t+1;q[r].l=q[l].l+a[i];}   
      l++;
               }
    
    fout<<"No solution."<<endl;
    return 0; //system("pause");
    
    }