poj3278 Catch That Cow

POJ 3278 Catch That Cow【C语言版】 我的第一道BFS题,还是按照习惯在网上搜索题解,令人郁闷的是大部分都是C++版的,用了queue库。而且可能因为这道题太水,好不容易找到的C语言版的解题报告中的注释又对新手不太友好,不是特别详细,有的讲的很齐全但是代码太难看了我拒绝看 = =。。。知道我遇到了这个人的博客,当然注释也不是很齐全,但是胜在代码啰嗦(划掉),马上就看懂了。所以我决定在他的解题报告代码的帮助下来开始我人生中第一道BFS题 阅读详情

本来用DFS做的,总是超时,拿别人AC的程序一测数据结果还一样,但是就是超时,这道题用DFS做要有很多剪枝,不然会有很多的重复,比如第x步走过点m,回溯后再DFS第y步的时候又走过m点,会有大量重复情况,还是BFS比较好剪枝

/*
Catch That Cow
Time Limit: 2000MS      Memory Limit: 65536K
Total Submissions: 63279        Accepted: 19813
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 X - 1 or X + 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.
*/

#include <cstdio>
#include <cstring>
#include <iostream>
#include <cstdlib>
#include <limits.h>
#include <algorithm>
#include <queue>

using namespace std;

const int maxn = 100010;
bool vis[maxn];
int sizev = sizeof(vis);
int step[maxn];    ///用于记录走过一个点时是第几步
queue<int> q;

int bfs(int N, int K) {
    while (!q.empty()) q.pop();   ///使用前清空队列

    q.push(N);    ///将FJ所在的点入队
    vis[N] = true;
    step[N] = 0;

    int head, next;

    while (!q.empty()) {    ///队列不为空时BFS
        head = q.front();
        q.pop();
        for (int i = 0; i < 3; i++) {    ///对于三个方向BFS
            if (i == 0) {
                next = head + 1;
            } else if (i == 1) {
                next = head - 1;
            } else if (i == 2) {
                next = head << 1;
            }
            if (next < 0 || next > 100000 || vis[next]) continue;   ///若越界或以前标记过则continue
                                ///其中对vis[next]判断剪枝,用DFS的话似乎不太好标记之前是否重复走过

            q.push(next);     ///将新的点入队
            vis[next] = true;
            step[next] = step[head] + 1;    ///走到next用了step[head] + 1步

            if (next == K) return step[next];   ///当走到K时此时step[next]既是最少步数,直接返回
        }
    }
}

int main()
{
    int N, K;
    while (~scanf("%d%d", &N, &K)) {
        if (N >= K) {              ///若N>=K则只能每次N - 1这样走,所以直接减就行了
            printf("%d\n", N - K);
            continue;
        }
        memset(vis, false, sizev);
        printf("%d\n", bfs(N, K));
    }
    return 0;
}


交通小白首投TRB就中Oral?我的完整时间线与避坑指南(附Editorial Manager实操截图) 本文详细解析了交通领域新手如何高效完成TRB国际会议投稿的全流程,从选题策略到投稿系统实操,再到评审过程解析和常见误区避坑指南。特别针对初次投稿者提供了实用建议,包括时间规划、选题考量、Editorial Manager系统操作技巧,以及如何应对评审意见。文章还分享了从录用到会议参与的关键步骤,帮助研究者提升投稿成功率。 阅读详情

相关推荐

Bootloader Design of PIC18 series MCU

注意:下列描述是在PIC单片机上启用Bootloader的一个相关知识的近似完备集。所有需要了解的,与bootloader与用户态程序交互的理论知识都已给出。包含内存组织,跳转,中断等必备功能的描述。

含光左卫的工作笔记集 1266

POJ 3278/HDU2717 —Catch That Cow (BFS)(另附测试数据)

当时我们校内比赛 我一看就是一道搜索题 结果没认真看 用的DFS怎么查 也查不出来 课下用的BFS做出来的 (PS:以后一定要看清题 求得是 最短 最少 一定要用BFS 别用DFS) /* 测试数据: 1 1 0 1 5 3 5 1 4 1 100000 21 200 100000 16 13 15000 15 21 4500 14 64 7913 12 15 438 8 ...

intmain_S的博客 394

海思Hi3516CV610--SPI NAND Flash移植实战:从手册到驱动的完整适配

本文详细介绍了海思Hi3516CV610芯片上SPI NAND Flash的移植实战,包括从手册解读到驱动适配的完整流程。以GD5F2GM7UEYIGR Flash为例,重点讲解了关键参数确认、模式选择、时序配置以及U-Boot和Linux内核驱动的具体实现步骤,帮助开发者快速完成Flash移植工作。

weixin_29158413的博客 446

【搜索算法】练习二:poj3278 Catch That Cow、poj1426 Find The Multiple

文章目录poj3278 Catch That Cow1.题目描述2.输入要求3.输出要求4.题目解释5.测试样例6.代码poj1426 Find The Multiple1.题目描述2.输入要求3.输出要求4.题目解释5.测试样例6.代码 poj3278 Catch That Cow 题目链接:https://vjudge.net/problem/POJ-3278 1.题目描述   Farmer John has been informed of the location of a fugitive cow

要像蜗牛一样一步一步往上爬! 894

PhoenixSuit全志刷机实战:从驱动安装到固件烧录的完整避坑指南

本文提供全志芯片设备使用PhoenixSuit进行线刷的完整实战指南。详细介绍了从驱动安装、双公头USB线连接、强制刷机模式进入,到固件烧录全过程的核心步骤与常见错误排查。重点解析了如何避免驱动安装失败、正确触发刷机模式以及应对烧录卡顿等关键问题,帮助用户顺利完成刷机或救砖操作。

algae的博客 1686

从C到汇编:单片机汇编语言核心概念迁移指南

本文详细介绍了从C语言迁移到单片机汇编语言的核心概念与实践指南,特别适合嵌入式开发者。文章深入探讨了汇编语言在性能优化、时序控制等方面的独特优势,并提供了变量存储、函数实现、流程控制等关键概念的对应关系,帮助开发者高效掌握汇编编程技巧。

weixin_31887307的博客 346

poj3278&&luogu2685&&luogu1588

Catch That Cow Time Limit: 2000MS Memory Limit: 65536K Total Submissions: 92986 Accepted: 29165 Description Farmer John has been informed of the location of a fugitive cow and wants to catch her...

Elijahqi 220

7.6 GPU页表更新机制

本文分析了AMDGPU驱动中BO到VA映射的页表更新实现机制。核心流程通过amdgpu_vm_bo_update()函数触发,支持CPU直接写入和SDMA异步命令两种更新模式。系统根据VRAM可见性自动选择最优更新策略,处理三种主要场景:命令提交、BO迁移和BO销毁。关键实现包括DMA地址数组处理、权限标志合并和BO迁移状态转换,最终通过amdgpu_vm_update_range()完成硬件页表更新。该机制有效平衡了更新延迟与吞吐量,为GPU虚拟内存管理提供基础支撑。

图形/计算GPU的驱动与虚拟化技术分享园地 2460

POJ3278解题报告

五一快乐!么么 POJ3278很难找到原题的中文翻译,都是给的题目大意哎!我是用java写的。BFS搜索, 有缺点望指出来。thaks。。 import java.io.BufferedInputStream; import java.util.LinkedList; import java.util.Queue; import java.util.Scanner; public clas

makefuture 941

Codex 实战 Skills:自动采集一天之内的 Git 提交,一键排版成精美工作日报并发送邮件

特性手动撰写脚本辅助(仅聚合)AI 增强自动化(本文方案)时间成本高(30-60分钟/天)中(5-10分钟/天)低(<1分钟/天)内容质量依赖个人总结能力原始数据堆砌,缺乏提炼专业、结构化、有业务视角信息完整性易遗漏完整,但难以阅读完整,且经过分类筛选维护成本无低中(需维护 Skill 配置)可扩展性低中高(可轻松添加周报、月报)适用场景所有开发者初级开发者追求效率的高级开发者本文详细介绍了一种基于 Codex Agent Skills 的自动日报生成方案。

yueyeguzhuo的专栏 102

OpenClaw 股票自动化交易实践指南:从原理到实战的完整技术路径

量化交易策略的开发是一个系统工程,需要综合运用金融知识、编程技能和数据分析能力。OpenClaw通过引入提示词工程技术,大大降低了策略开发的技术门槛,使得更多投资者能够参与到量化交易中来。但技术只是工具,真正决定策略成败的是对市场的深刻理解和严格的风险管理。本章系统介绍了OpenClaw环境下的策略开发方法,从提示词驱动到传统代码实现,从参数优化到回测验证,涵盖了策略开发的完整流程。提示词驱动方式适合快速验证交易想法,传统代码方式适合实现复杂的定制逻辑,两种方式可以协同使用,发挥各自的优势。

lovely_yoshino的博客 5989

POJ 3278 解题报告

这道题是个BFS的问题,因为要求的是一个相邻节点间距离都为1的

thestoryofsnow的专栏 837

SerDes系列之如何选择AC耦合电容

交流耦合电容用于隔离PCB互连时的直流分量(Common-mode voltage),同时传递交流分量(Voltage swing),其作用类似于一个高通滤波器,但是,如果电容容值选取不当,使用过程中会产生信号质量问题,典型的应用场景:当包含相同的长串1或0的NRZ数据应用于该高通滤波器时,会发生低频电压跌落,导致低频模式相关抖动(PDJ)。

一只豌豆象的博客 2350

POJ 3278 Catch That Cow

POJ 3278 Catch That Cow 题目大意: 在一个一维的坐标下,FJ和Cow各自处于一个坐标点,Cow不动,然后问FJ追上Cow的最少时间 FJ可向前走一步,耗时一分钟 FJ可向后走一步,耗时一分钟 FJ可走到当前坐标的两倍处,耗时一分钟(坐标均为正数) 具体思路: 分两种情况,若FJ在Cow的前方,那么他只能一步一步往后走,耗时N-K 若FJ在Cow后方,则BFS搜索 #in...

指弹键盘哼民谣 613

Camera2Demo

在Camera2 的基础上进行封装,使得Camera2一堆初始化逻辑与Activity分离,降低耦合度,完成预览拍照并保存的操作

最新的sdio 4.0 spec 协议标准 带书签 高清完整PDF版

Part-E1-SDIO-Specification-Ver4.00-Final-120220.pdf:最新的sdio 4.0 spec 协议标准 带书签 高清完整PDF版,包括SDIO 接口的外设,SDIO 接口官方协议等。

POJ-3278 Catch That Cow

POJ-3278 Catch That Cow 题目链接:POJ-3278 题目大意:农夫再n这个点上找在k点的牛 农夫可以步行 可以向前走一步或者向后走一步 可以传送 传送到2*当前节点的位置上 问农夫多少步可以找到牛 解题思路:BFS 以为贼简单的那种 然后就错了两次 第一次内存超限 肯定是queue爆掉了 然后我就把queue提升到方法外边了 还是超限 然后试了试1 100000这组数据 ...

鱼头的水题之路 443

ET2012新版免狗免安装绿色软件

ET2012新版免狗免安祖昂绿色软件。,新界面,新视觉,

POJ3278---Catch That Cow

POJ3278—Catch That Cow 题目描述 农夫约翰已被告知逃亡牛的位置,并希望立即抓住她。他开始于一个点N(0≤ N≤100,000)和牛是在点K (0≤ K≤100,000),他们在同一条线上。农夫约翰有两种交通方式:步行和乘车。 行走:约翰可以在一分钟内从任意点X移动到X -1或X + 1 点 乘车:约翰可以在一分钟内从任意点X移动到点2× X . 如果母牛不知道它的追赶,根本不动,那么农夫约翰需要多长时间才能找回它? 输入 第1行:两个以空格分隔的整数:N和K 输出 第1行:农夫约翰用最

LXYDSF的博客 1613

poj 3278 catch that cow

约翰希望立即抓住逃亡的牛。当前约翰在节点 N,牛在节点 K(0≤N,K≤100 000)时,他们在同一条线上。约翰有两种交通方式:步行和乘车。如果牛不知道有人在追赶自己,原地不动,那么约翰需要多长时间才能抓住牛?1.步行:约翰可以在一分钟内从任意节点 X 移动到节点 X-1 或 X+1。2.乘车:约翰可以在一分钟内从任意节点 X 移动到节点 2×X。输入:两个整数 N 和 K。输出:单行输出约翰抓住牛所需的最短时间(以分钟为单位)。输入样例5 17输出样例4。

qq_74248245的博客 644

POJ.3278 Catch That Cow (BFS)

POJ.3278 Catch That Cow (BFS)题意分析求最少的操作次数,暴力就用BFS。 这题坑点挺多,一开始交上去无限RE,摸不着头脑,后来发现后数组越界了。因为存在-1的操作和*2的操作 ,不加判断就直接越界。 这告诉我们一个道理,光把数组开大点,是没有用的。代码总览#include <iostream> #include <cstdio> #include <algorithm

Pengwill's Blog 327

[POJ 3278] Catch That Cow

[POJ 3278] Catch That Cow 题目链接:http://poj.org/problem?id=3278 题目理解: 从当前点N,到点K,可以选择的方式有三种,分别是:当前位置+1,当前位置-1,当前位置×2; 求走的最少步数。 1 #include&lt;iostream&gt; 2 #include&lt;c...

Youpeng 149

POJ T3278 Catch That Cow

                              POJ T3278 Catch That Cow  题解:     水题,Bfs裸题,变成一维更简单,走的方向只要判断下为2时是乘操作就行了......   代码: #include&lt;cstdio&gt; #include&lt;iostream&gt; #include&lt;cstring&gt; #include&...

Mr__Charles的博客 224

POJ.3278 Catch That Cow (BFS)

POJ.3278 Catch That Cow (BFS)题意分析给出给出初始坐标N,你可以执行的操作有N-1,N+1,N*2,求出最少需要几次操作,使得N=K。BFS时每次有3种操作,按照操作来即可。特别需要注意越界的问题,坐标不能小于0,也不能大于题目给的最大值100000.然后就没太大问题。一开始因为忘记数组越界的问题,RE了几次。代码总览#include <queue> #include <

Pengwill's Blog 273

Catch That Cow POJ - 3278

Catch That Cow POJ - 3278 题目大意: 给出小于等于100000的两个数字 a,b 从a到b最少需要几次 每次可以+1,-1,*2 输出结果 分析: 简单BFS 将a放入队列中,如果队列不空,就取出队头,分析三种情况,如果没被访问过就将新的a放入队列,直到取出的队头等于b,返回查找的次数。 AC代码: #include &lt;iostream&gt; #include &...

Fighting_Eagle的博客 303

[POJ 3278]Catch That Cow[BFS]

题目链接:[POJ 3278]Catch That Cow[BFS] 题意分析: 农夫每次可以向左或者向右走,或者跳跃到当前位置的两倍位置上。问:最少几次操作可以到达奶牛的K位置 解题思路: 从起点BFS即可。注意边界条件和访问标记量。 个人感受: 虽然简单,还是ME+WA。ME是因为忘记标记访问量,WA是因为边界上的2*X 具体代码如下: #include #include #i

闲停 610

POJ 3278 Catch That Cow --- 简单BFS

/* POJ 3278 Catch That Cow --- 简单BFS */ #include <cstdio> #include <queue> #include <cstring> using namespace std; const int maxn = 100005; bool visit[maxn]; int step...

weixin_30711917的博客 117

POJ-3278 Catch That Cow(广搜)

POJ-3278 Catch That Cow(广搜) 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 an...

碳酸钙的01妖精的博客 204
上一篇: poj2828 Buy Tickets
下一篇: hdu计算机学院大学生程序设计竞赛(2015’11)1001 搬砖
Daemoonn
博客等级 码龄11年 42粉丝 198原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值