首页 > 其他分享 >USACO备考冲刺必刷题 | P1588 Catch That Cow S

USACO备考冲刺必刷题 | P1588 Catch That Cow S

时间:2024-12-14 18:56:45浏览次数:7  
标签:Cow int P1588 tp vis 必刷题 USACO && FJ

学习C++从娃娃抓起!记录下USACO(美国信息学奥赛)备考学习过程中的题目,记录每一个瞬间。

附上汇总贴:USACO备考冲刺必刷题 | 汇总-CSDN博客


【题目描述】

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

【输入】

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

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

【输出】

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

【输入样例】

1 
5 17

【输出样例】

4

【代码详解】

#include <bits/stdc++.h>
using namespace std;
int t, x, y;
int vis[100005]={0}, d[100005]={0};  // vis数组用来标记该点是否来过,d数组用来表示到达该点的步数
int main()
{
    cin >> t;  // 输入t组
    while (t--) {  // 依次接受t组数据输入并处理
        cin >> x >> y;  // 输入x和y
        queue<int> q;  // 定义队列
        memset(vis, 0, sizeof(vis));  // 初始化vis和d数组
        memset(d, 0, sizeof(d));
        if (x==y) {  // 如果x与y重合
            cout << 0 << endl;  // 说明牛和FJ在同一个位置,输出为0
        }
        if (x>y) {  // 如果x大于y
            cout << x-y << endl;  // 则只能向后退,步数为x-y
        }
        if (x < y) {  // 如果x小于y,则使用广搜
            int tp = x;  // 定义tp为x坐标
            vis[tp] = 1;  // 标记该点已经访问过
            q.push(tp);  // 压入队列中
            while (!q.empty()) {  // 如果队列不为空
                int tp = q.front();  // 取出队头
                q.pop();
                if (tp==y) {  // 广搜退出条件,即tp与y重合
                    cout << d[tp] << endl;  // 打印d[tp],即到达tp这个点的步数
                    break;  // 退出循环,无需继续搜索
                }
                if (vis[tp+1]!=1 && tp+1>=0 && tp+1<=100000) {  // 对前进一步的位置进行边界判断及访问情况判断,符合条件再继续
                    q.push(tp+1);  // 前进一步位置压入队列
                    vis[tp+1] = 1;  // 标记为访问过
                    d[tp+1] = d[tp] + 1;  // 更新到达前进一步的步数
                }
                if (vis[tp-1]!=1 && tp-1>=0 && tp-1<=100000) {  // 对后退一步的位置进行边界判断及访问情况判断
                    q.push(tp-1);  // 后退一步位置压入队列
                    vis[tp-1] = 1;  // 标记为访问过
                    d[tp-1] = d[tp] + 1;  // 更新到达后退一步的步数
                }
                if (vis[tp*2]!=1 && tp*2>=0 && tp*2<=100000) {  // 对2*x的位置进行边界判断及访问情况判断
                    q.push(tp*2);  // 2*x位置压入队列
                    vis[tp*2] = 1;  // 标记为访问过
                    d[tp*2] = d[tp] + 1;  // 更新2*x位置的步数
                }
            }
        } 
    }
    return 0;
}

【运行结果】

1 
5 17
4

标签:Cow,int,P1588,tp,vis,必刷题,USACO,&&,FJ
From: https://blog.csdn.net/guolianggsta/article/details/134663041

相关文章

  • USACO备考冲刺必刷题 | P1596 Lake Counting S
    学习C++从娃娃抓起!记录下USACO(美国信息学奥赛)备考学习过程中的题目,记录每一个瞬间。附上汇总贴:USACO备考冲刺必刷题|汇总-CSDN博客【题目描述】由于近期的降雨,雨水汇集在农民约翰的田地不同的地方。我们用一个 N×M(1≤N≤100,1≤M≤100)的网格图表示。每个网格中有水(W......
  • Sleepy Cow Herding
    题目描述FarmerJohn的三头获奖奶牛Bessie、Elsie和Mildred,总是会迷路走到农场上遥远的地方去!他需要你帮助将她们一起赶回来。农场的草地大体是一块狭长的区域——我们可以将其想象成一条数轴,奶牛可以占据数轴上的任意整数位置。这3头奶牛现在正位于不同的整数位置,Fa......
  • USACO备考冲刺必刷题 | P1676 Aggressive cows
    学习C++从娃娃抓起!记录下USACO(美国信息学奥赛)备考学习过程中的题目,记录每一个瞬间。附上汇总贴:USACO备考冲刺必刷题|汇总-CSDN博客【题目描述】农夫约翰建造了一座有 n 间牛舍的小屋,牛舍排在一条直线上,第 i 间牛舍在 xi 的位置,但是约翰的 m 头牛对小屋很不满意,因......
  • 必刷题拳打吉布斯脚踢霍姆亥兹恩情课文
    从IUPAC访问回来必刷题爷爷全然不顾身体的疲惫,连夜找我们几个高中生商量期中考试的安排。谈得晚了,便送我们出门,要司机送我们回家。在去大门口的路上,我们说:“必爷爷,您回去休息吧。您刚从IUPAC回来。”必爷爷摇摇头,“不碍事,你们知道现在国际上有很多人把高中化学当作敌人,不断......
  • 题解:[USACO07DEC] Sightseeing Cows G
    洛谷P2868题目大意有个$n$个点,$m$条边的有向图,点有点权,边有边权。现在要找出一个环,使得点权和与边权和的比值最大。思路既然说要使得点权和与边权和的比值最大,那么就会想到$01$分数规划。二分答案就不用说了,重点是这个$check$函数。$01$分数规划的板子中要检查的是......
  • P2863 [USACO06JAN] The Cow Prom S
    https://www.luogu.com.cn/problem/P2863[USACO06JAN]TheCowPromS题目描述有一个n个点,m条边的有向图,请求出这个图点数大于1的强连通分量个数。输入格式第一行为两个整数n和m。第二行至m+1行,每一行有两个整数a和b,表示有一条从a到b的有向边。输出格式......
  • GESP一级必刷题 分支结构 P5713 洛谷团队系统
    【深基3.例5】洛谷团队系统题目描述在洛谷上使用团队系统非常方便的添加自己的题目。如果在自己的电脑上配置题目和测试数据,每题需要花费时间555分钟;而在洛谷团队中上......
  • 蓝桥杯备考冲刺必刷题(Python) | P152 反倍数
    学习Python从娃娃抓起!记录下蓝桥杯备考比赛学习过程中的题目,记录每一个瞬间。附上汇总贴:蓝桥杯备考冲刺必刷题(Python)|汇总-CSDN博客【题目描述】给定三个整数a,b,c,如果一个整数既不是α的整数倍也不是b的整数倍还不是c的整数倍,则这个数称为反倍数。请问在1至n中有多少个......
  • 蓝桥杯备考冲刺必刷题(Python) | 128 冰雹数
    学习Python从娃娃抓起!记录下蓝桥杯备考比赛学习过程中的题目,记录每一个瞬间。附上汇总贴:蓝桥杯备考冲刺必刷题(Python)|汇总-CSDN博客【题目描述】任意给定一个正整数N,如果是偶数,执行:N/2;如果是奇数,执行:Nx3+1,生成的新的数字再执行同样的动作,循环往复。通过观察发现,这个......
  • 蓝桥杯备考冲刺必刷题(Python) | 548 时间加法
    学习Python从娃娃抓起!记录下蓝桥杯备考比赛学习过程中的题目,记录每一个瞬间。附上汇总贴:蓝桥杯备考冲刺必刷题(Python)|汇总-CSDN博客【题目描述】现在时间是a点b分,请问t分钟后,是几点几分?【输入】输入的第一行包含一个整数a。第二行包含一个整数b.第三行包含一个整数t......