当前位置: 首页 > article >正文

P1588 [USACO07OPEN] Catch That Cow S

[USACO07OPEN] Catch That Cow S

题目描述

FJ 丢失了他的一头牛,他决定追回他的牛。已知 FJ 和牛在一条直线上,初始位置分别为 x x x y y y,假定牛在原地不动。FJ 的行走方式很特别:他每一次可以前进一步、后退一步或者直接走到 2 × x 2\times x 2×x 的位置。计算他至少需要几步追上他的牛。

输入格式

第一行为一个整数 t   ( 1 ≤ t ≤ 10 ) t\ ( 1\le t\le 10) t (1t10),表示数据组数;

接下来每行包含一个两个正整数 x , y   ( 0 < x , y ≤ 1 0 5 ) x,y\ (0<x,y \le 10^5) x,y (0<x,y105),分别表示 FJ 和牛的坐标。

输出格式

对于每组数据,输出最少步数。

样例 #1

样例输入 #1

1 
5 17

样例输出 #1

4
#include<bits/stdc++.h>
using namespace std;
const long long N=1000000;
long long n,k,T,ans;
long long vis[N],d[N],dx[3];
long long q[N],l,r;
void bfs(){
	while(l<=r){
		long long x=q[l];
		if(x==k){
			printf("%d\n",d[l]);
			return;
		}
		dx[0]=x+1,dx[1]=x-1,dx[2]=x<<1;
		for(long long i=0;i<3;i++)
		    if(dx[i]>=0&&dx[i]<N&&!vis[dx[i]])
			    q[++r]=dx[i],d[r]=d[l]+1,vis[dx[i]]=1;
		l++;
	}
}
int main(){
	scanf("%d",&T);
	while(T--){
		memset(d,0,sizeof(d));
		memset(vis,0,sizeof(vis));
		l=r=1;
		scanf("%d%d",&n,&k);
		q[l]=n;
		vis[n]=1;
		bfs();
	}
    return 0;
}

http://www.kler.cn/news/367482.html

相关文章:

  • LDR6328:助力小家电实现TYPE-C接口快充输入
  • 【Python】深入理解Python的列表推导式与生成器表达式:简洁与性能的权衡
  • 基于JAVASE的题
  • 【计算机操作系统】课程 作业二 进程与线程 408考研
  • 安卓屏幕息屏唤醒
  • 【Axure高保真原型】分级树筛选中继器表格
  • Unity C#脚本的热更新
  • 单细胞 | 转录因子足迹分析
  • Docker容器间通信
  • 深入了解 MySQL 中的 INSERT ... SELECT 语句
  • iOS弹出系统相册选择弹窗
  • VS/Qt Creator +QT生成带.ico图标的.exe 并打包
  • qt QLabel详解
  • 智能合约在Web3中的作用:区块链技术的创新实践
  • JAVA基础-树和Set集合
  • uiautomatorviewer中的两个错误
  • 在虚拟化环境中,虚拟机的资源分配是否真的能够完全等效于物理服务器?是否有某些特定的工作负载在虚拟化环境中始终无法达到理想表现?
  • 【ChatGPT插件漏洞三连发之一】未授权恶意插件安装
  • Chromium HTML5 新的 Input 类型search对应c++
  • 【C++ 真题】B2099 矩阵交换行
  • 5.Linux按键驱动-fasync异步通知
  • 微信支付Java+uniapp微信小程序
  • Netty简单应用
  • C语言教程——数组(2)
  • UML之用例图详解
  • Linux 常用命令总汇