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

2971:抓住那头牛

题目

总时间限制: 2000ms 内存限制: 65536kB

描述

农夫知道一头牛的位置,想要抓住它。农夫和牛都位于数轴上,农夫起始位于点N(0<=N<=100000),牛位于点K(0<=K<=100000)。农夫有两种移动方式:

1、从X移动到X-1或X+1,每次移动花费一分钟
2、从X移动到2*X,每次移动花费一分钟

假设牛没有意识到农夫的行动,站在原地不动。农夫最少要花多少时间才能抓住牛?

输入

两个整数,N和K

输出

一个整数,农夫抓到牛所要花费的最小分钟数

样例输入

5 17

样例输出

4

题意

农夫起始位置为N,牛的位置为K,输入为N和K,农夫每分钟可以向左或向右移动一步(从X到X-1或X+1),或者将当前位置翻倍(从X到2*X),每次移动花费一分钟,输出最少分钟数。

思路

用深度优先搜索+递归,从牛的位置K开始向农夫的位置N查找。如果农夫位置N大于牛位置K,通过每次后退一步的方式(花费N-K分钟);否则,从K位置开始,通过三种操作反向思考:当K为奇数时,+1或-1,当K为偶数时,/2(对应农夫的*2)

代码

#include<bits/stdc++.h>
using namespace std;
int n,k,ans;
void d(int x,int y,int sum){//递归函数,x是农夫位置,y是牛位置,sum是已花费时间if(ans<=sum) return;//如果当前时间已经超过已知最小时间,返回ans=min(ans,sum+abs(y-x));//更新最短时间为当前时间加上走到牛的位置的时间if(x==y){//如果已经到达ans=min(ans,sum);//更新时间return;}if(x>y){//如果农夫在牛右边,向左走d(x,y+1,sum+1);}else{//如果农夫在牛左边if(y%2!=0){//如果牛的位置是奇数d(x,y+1,sum+1);//牛位置+1d(x,y-1,sum+1);//牛位置-1}else{//如果牛的位置是偶数d(x,y/2,sum+1);//牛位置/2}}return;
}
int main(){cin>>n>>k;if(n>k){//如果农夫在牛右边,向左走cout<<n-k;return 0;}ans=k-n;//初始化答案为直接走到的时间d(n,k,0);//调用cout<<ans;return 0;
}
http://www.jsqmd.com/news/659/

相关文章:

  • 高效测试的第一步:5个用例设计基础思维模型
  • MFC Button 控件完全指南:从基础到进阶 - 指南
  • Python笔记总结
  • vulnhub靶机:GoldenEye-v1
  • 8465:马走日
  • 性能调优之NUMA调优
  • 深入解析:SpringMVC静态资源与Servlet容器指南
  • CCPC Online 2025 游寄
  • CentOS 7 容器时遇到了 yum update 报错
  • MIT新论文:数据即上限,扩散模型的关键能力来自图像统计规律,而非复杂架构
  • 实用指南:光学神经网络与人工智能应用
  • Zabbix 企业级监控架构实战指南:从搭建、可视化到智能告警
  • 基于MATLAB的视频动态目标跟踪检测搭建方案
  • 第三篇:Windows10/11软件集成与系统优化 - 教程
  • U522155 数据生成(小心电脑)
  • Windows-Appx
  • 实用指南:OSG中osgFX库
  • 2025.9.20——1橙
  • CSP 2025 游记
  • 配置Spring框架以连接SQL Server数据库
  • 这一辈子大多数日子是无聊的
  • Elasticsearch面试精讲 Day 11:索引模板与动态映射 - 指南
  • Go 实现验证码识别
  • 跳出 AI 编程的「兔子洞」,4 个实战策略帮你解决90%的死循环
  • 用 PHP 和 Tesseract OCR 识别英文数字验证码
  • 凝望深渊时,深渊也凝望着你(黑洞与摇钱树)
  • 详细介绍:《Vuejs设计与实现》第 16 章(解析器) 中
  • spring项目部署后为什么会生成 logback-spring.xml记录
  • 【解决】Matlab函数体突然不自动缩进了
  • React+antd搭建监听localStorage变化多页面更新+纯js单页面table模糊、精确查询、添加、展示功能