Catch That Cow
这道题wa了首先是RE,因为数组下标没有有负的,其次是wa,wa了好几次,我就耐闷了,原来题目要求我输出最小的时间,还有当N>M时。。
#include<iostream>
#include<string.h>
#include<queue>
using namespace std;
int N,M,visit[1000010],dp[1000010];
const int inf=0x7fffffff;
int main()
{
while(scanf("%d%d",&N,&M)!=EOF)
{
int i,j,x,t,max=inf;
if(N>M)
{
printf("%d\n",N-M);
continue;
}
memset(visit,0,sizeof(visit));
memset(dp,0,sizeof(dp));
queue<int>q;
q.push(N);
x=N;
while(!q.empty())
{
x=q.front();
if(x==M)
{
if(dp[x]<max)
max=dp[x];
visit[x]=0;
}
q.pop();
t=x-1;
if(!visit[t]&&t>=0&&t<=M+2)
{
//if(!(t*2<=M&&(t+2)*2<=M))
q.push(t);visit[t]=1;dp[t]=dp[x]+1;
}
t=x+1;
if(!visit[t]&&t>=0&&t<=M+2)
{
q.push(t);
visit[t]=1;
dp[t]=dp[x]+1;
}
t=2*x;
if(!visit[t]&&t>=0&&t<=M+2)
{
q.push(t);
visit[t]=1;
dp[t]=dp[x]+1;
}
}
printf("%d\n",max);
}
return 0;
}
posted on 2011-05-08 21:04 more think, more gains 阅读(224) 评论(0) 收藏 举报
浙公网安备 33010602011771号