站外题求助!!!
  • 板块灌水区
  • 楼主AK_CSPS
  • 当前回复3
  • 已保存回复3
  • 发布时间2024/3/30 20:28
  • 上次更新2024/3/30 22:24:36
查看原帖
站外题求助!!!
933895
AK_CSPS楼主2024/3/30 20:28

林克的逃亡

林克计划败露企图逃跑,在数据世界中,林克逃跑只能使用步行或者传送,林克当前处于一个一维坐标系中某点x,每一秒钟他可以步行可以往前走一步即到达x+1,也可以往后走一步即达到x-1,或者使用传送,可以直接传送到2x的位置。林克的起始点为S,他必须跑到K点才能逃脱。例如林克目前在5,目标点在17,他可以先传送到达10,再往回走一步到达9,在传送到达18,最后再往回走一步达到17,这样5-10-9-18-17,只需要4秒钟。

输入格式:

只有一行包含两个整数S和K

输出格式:

输出一个整数,表示林克最快几秒钟可以达到K点。

限制:

0<=S<=100000

0<=K<=100000

样例 1 :

输入:

5 17

输出:

4

说明:

5-10-9-18-17,需要4秒钟。

附上代码(深搜版):

#include <bits/stdc++.h>
using namespace std;
int s,k,u[4],cnt=INT_MAX;
bool book[200005];
void dfs(int x,int step)
{
	book[x]=1;
	if(x==k)
	{
		cnt=min(cnt,step);
	}
	u[1]=x+1;
	u[2]=x+2;
	u[3]=2*x;
	for(int i=1;i<=3;i++)
	{
		if(book[u[i]]==0&&u[i]>=0&&u[i]<=2*k)
		{
			dfs(u[i],step+1);
			book[u[i]]=0;
		}
	}
}
int main()
{
	cin>>s>>k;
	dfs(s,0);
	cout<<cnt;
	return 0;
}
2024/3/30 20:28
加载中...