首页 星云 工具 资源 星选 资讯 热门工具
:

PDF转图片 完全免费 小红书视频下载 无水印 抖音视频下载 无水印 数字星空

POJ3278 Catch That Cow

编程知识
2024年07月24日 21:04
Catch That Cow
Time Limit: 2000MS   Memory Limit: 65536K
Total Submissions: 222142   Accepted: 67092

Description

Farmer John has been informed of the location of a fugitive cow and wants to catch her immediately. He starts at a point N (0 ≤ N ≤ 100,000) on a number line and the cow is at a point K (0 ≤ K ≤ 100,000) on the same number line. Farmer John has two modes of transportation: walking and teleporting.

* Walking: FJ can move from any point X to the points - 1 or + 1 in a single minute
* Teleporting: FJ can move from any point X to the point 2 × X in a single minute.

If the cow, unaware of its pursuit, does not move at all, how long does it take for Farmer John to retrieve it?

Input

Line 1: Two space-separated integers: N and K

Output

Line 1: The least amount of time, in minutes, it takes for Farmer John to catch the fugitive cow.

Sample Input

5 17

Sample Output

4

Hint

The fastest way for Farmer John to reach the fugitive cow is to move along the following path: 5-10-9-18-17, which takes 4 minutes.
 
 
题目大意:
FJ抓位置固定不动的奶牛(二者均在一条直线上),FJ和奶牛位置分别为输入的N(0 ≤ N ≤ 100,000)和K(0 ≤ N ≤ 100,000),FJ有两种走法

*步行:FJ可以在一分钟内从任何一个点X移动到点X-1或X+1

*传送:FJ可以在一分钟内从任何一个X点移动到2*X点

输出FJ抓带到奶牛需要的最短时间,以分钟为单位

 

思路:

明显的BFS,几年没摸,重新回顾BFS,手写结构体构造先进先出的队列,

AC代码:

 1 #include<stdio.h>
 2 int iswalk[100050];
 3 int p;//实时移动数组下标,视作队尾添加
 4 int q;//取数,视作队头出队
 5 int N, K;
 6 struct trajectory
 7 {
 8     int step;
 9     int num;
10 };
11 struct trajectory tra[100050];
12 int main()
13 {
14     scanf("%d %d", &N, &K);
15     tra[q].num = N;
16     tra[q].step = 0;
17     iswalk[N] = 1;
18     while(q <= p)
19     {
20         if(tra[q].num == K){
21             printf("%d\n", tra[q].step);
22             break;
23         }
24         else
25         {
26             if(iswalk[tra[q].num - 1] == 0 && (tra[q].num - 1 >= 0) && (tra[q].num - 1) <= 100000){
27                 iswalk[tra[q].num - 1] = 1;
28                 p ++;
29                 tra[p].num = tra[q].num - 1;
30                 tra[p].step = tra[q].step + 1;
31             }
32             if(iswalk[tra[q].num + 1] == 0 && (tra[q].num + 1 >= 0) && (tra[q].num + 1) <= 100000){
33                 iswalk[tra[q].num + 1] = 1;
34                 p ++;
35                 tra[p].num = tra[q].num + 1;
36                 tra[p].step = tra[q].step + 1;
37             }
38             if(iswalk[tra[q].num * 2] == 0 && (tra[q].num * 2) >= 0 && (tra[q].num * 2) <= 100000){
39                 iswalk[tra[q].num * 2] = 1;
40                 p ++;
41                 tra[p].num = tra[q].num * 2;
42                 tra[p].step = tra[q].step + 1;
43             }
44 
45             q ++;
46         }
47     }
48 }

 

 

起手错误写法:

一:for的DFS(POJ3984的代码,都是BFS,于是推翻并找到奶牛这个基础题来写)

 1 #include<stdio.h>
 2 int dir[4][2] = {{-1, 0}, {1, 0}, {0, -1}, {0, 1}};
 3 int bfs(int x, int y);
 4 int maze[5][5];
 5 int step;
 6 int evestep[25][2];//记录轨迹
 7 int OnGo[5][5];//是否走过这个点
 8 int main()
 9 //int dir[4][2] = {(-1, 0), (1, 0), (0, -1), (0, 1)};
10 {
11 //    int step;
12     for(int i = 0; i < 5; i ++)
13         for(int j = 0; j < 5; j ++)
14             scanf("%d", &maze[i][j]);
15     int x = 0, y = 0;
16     OnGo[0][0] == 1;
17 //    int bfs(x, y);
18     bfs(x, y);
19 }
20 int bfs(int x, int y)
21 {
22     for(int i = 0; i < 4; i ++)
23     {
24         x += dir[i][0];
25         y += dir[i][1];
26         if(maze[x][y] == 1 || x < 0 || y < 0 || x > 4 || y > 4)
27             continue;
28         else if(maze[x][y] == 0 && OnGo[x][y] == 0)
29         {
30             OnGo[x][y] == 1;
31             step++;
32             evestep[step][0] = x;
33             evestep[step][1] = y;
34             bfs(x, y);
35         }
36     }
37 //}
38 //推翻重写,昨天写的是DFS
39 
40 //BFS
View Code

二:推翻重写后,依旧是DFS的思路,以为BFS会携带每一层的step

 1 #include<stdio.h>
 2 int tra[100050];
 3 int iswalk[100050];
 4 int p, q;
 5 int bfs(int FJ_x, int step)
 6 {
 7     if(FJ_x == K)
 8         return step;
 9     else
10     {
11         if((FJ_x - 1) >= 0 && iswalk[FJ_x - 1] == 0){
12             iswalk[FJ_x - 1] = 1;
13             step ++;
14             bfs(FJ_x - 1, step)
15         }
16         if((FJ_x + 1) >= 0 && iswalk[FJ_x + 1] == 0){
17             iswalk[FJ_x + 1] = 1;
18             step ++;
19             bfs(FJ_x + 1, step)
20         }
21         if((FJ_x * 2) >= 0 && iswalk[FJ_x * 2] == 0){
22             iswalk[FJ_x * 2] = 1;
23             step ++;
24             bfs(FJ_x * 2, step)
25         }
26     }
27 }
View Code

 

From:https://www.cnblogs.com/gerjcs/p/18307728
本文地址: http://www.shuzixingkong.net/article/390
0评论
提交 加载更多评论
其他文章 第十二节 JMeter基础-中级地址信息【IF控制器】
文章介绍了在JMeter中核对收货地址信息的操作流程,并深入探讨了JMeter中的IF控制器、日志等组件的使用。特别强调了Groovy和Jexl3在表达式语言上的区别,以及它们在Java平台上的应用场景和语法特性。
第十二节 JMeter基础-中级地址信息【IF控制器】 第十二节 JMeter基础-中级地址信息【IF控制器】 第十二节 JMeter基础-中级地址信息【IF控制器】
记录荒废了三年的四年.net开发的第二次面试(进复试了)
这次面试的是小公司,深圳计通智能,面试分为初试和复试。使用腾讯视频会议完成。相比与上次面试,这次有所进步,进复试了。当然,这可能也与面试风格有关。这次面试着重与项目经历和技术,因此回答比较顺畅。 这一周干了什么 我先是研究了上次面试没回答出来,或者回答得不好的技术问题。然后顺着简历上的技术,又复习了
[WPF] 脱机环境实现支持拼音模糊搜索的AutoCompleteBox
AutoCompleteBox是一个常见的提高输入效率的组件,很多WPF的第三方控件库都提供了这个组件,但基本都是字符串的子串匹配,不支持拼音模糊匹配,例如无法通过输入ldh或liudehua匹配到刘德华。要实现拼音模糊搜索功能,通常会采用分词、数据库等技术对待匹配数据集进行预处理。某些场景受制于条
[WPF] 脱机环境实现支持拼音模糊搜索的AutoCompleteBox
我可以写代码写到退休吗?记录我的10年前端技术之旅
希望通过分享我个人的经历,给技术人一点信心和方向,原来一直做技术也可以做十年,写代码不仅是我赖以谋生的手段,更是一种生活方式,通过写代码我认识很多志同道合的朋友,在写代码的路上,我也在欣赏和探索这世界
我可以写代码写到退休吗?记录我的10年前端技术之旅 我可以写代码写到退休吗?记录我的10年前端技术之旅 我可以写代码写到退休吗?记录我的10年前端技术之旅
locust多进程实现分布式压测遇到的问题
多进程分布式的实现: locust分布式时,需借助命令locust 一个一个启动worker,在使用中有点繁琐, 下面借助于多进程,按既定worker数量,一键启动; from locust import FastHttpUser, task, User, events, HttpUser #cla
C# 12 新增功能实操!
前言 今天咱们一起来探索并实践 C# 12 引入的全新功能! C#/.NET该如何自学入门? 注意:使用这些功能需要使用最新的 Visual Studio 2022 版本或安装 .NET 8 SDK 。 主构造函数 主构造函数允许你直接在类定义中声明构造函数参数,并自动生成相应的属性。 主构造函数参
C# 12 新增功能实操! C# 12 新增功能实操!
nginx的一些功能
一、四层(tcp/udp)代理 由于nginx默认是不支持四层代理的因此在安装的时候需要加上对应的模块with-stream ./configure --with-stream # 查看当前nginx安装了什么模块 root@proxy[05:52:09]:/usr/local/nginx $ sb
nginx的一些功能
全网最适合入门的面向对象编程教程:24 类和对象的 Python 实现-异常的捕获与处理:try/except 语句、文件读写示例、Exception 引用
本文主要介绍了在使用Python面向对象编程时,如何使用try/except语句捕获并处理异常,并辅以CSV文件读写为例进行讲解,同时说明了如何对Exception对象进行引用。
全网最适合入门的面向对象编程教程:24 类和对象的 Python 实现-异常的捕获与处理:try/except 语句、文件读写示例、Exception 引用 全网最适合入门的面向对象编程教程:24 类和对象的 Python 实现-异常的捕获与处理:try/except 语句、文件读写示例、Exception 引用 全网最适合入门的面向对象编程教程:24 类和对象的 Python 实现-异常的捕获与处理:try/except 语句、文件读写示例、Exception 引用