• 洛谷P1588 丢失的牛


    P1588 丢失的牛

      • 158通过
      • 654提交
    • 题目提供者JOHNKRAM
    • 标签USACO
    • 难度普及/提高-
    • 时空限制1s / 128MB

      讨论  题解  

    最新讨论更多讨论

    • 答案下载下来是对的,但过不…
    • 此题卡stl的queue?
    • 假的编译器。。。
    • 怎么A不了

    题目描述

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

    输入输出格式

    输入格式:

    第一行为一个整数t(≤10),表示数据组数;接下来每行包含一个两个正整数x和y(x,y≤10^5),分别表示FJ和牛的坐标。

    输出格式:

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

    输入输出样例

    输入样例#1:
    1 
    5 17
    输出样例#1:
       4
    分析:这道题使我更深刻的理解了dfs和bfs的区别,直接dfs是不行的,因为一条道走到黑,而且不能确保步数最少,所以用bfs,这样每扩展一步都是步数最少的,这样的话还要加上剪枝:1.如果走到负数就不要-1了 2.如果大于y就不增加了。
    #include <cstdio>
    #include <cstring>
    #include <iostream>
    #include <algorithm>
    #include <queue>
    #include <stack>
    #include <cstdio>
    #include <iostream>
    #include <cstring>
    #include <algorithm>
    #include <string>
    
    using namespace std;
    
    int t, x, y,d[1000100];
    
    int main()
    {
        scanf("%d", &t);
        while (t--)
        {
            scanf("%d%d", &x, &y);
            memset(d, 0, sizeof(d));
            queue <int> q;
            q.push(x);
            while (!q.empty())
            {
                int t = q.front();
                q.pop();
                if (t == y)
                {
                    printf("%d
    ", d[t]);
                    break;
                }
                if (t - 1 > 0 && (!d[t - 1] || d[t - 1] > d[t] + 1))
                {
                    d[t - 1] = d[t] + 1;
                    q.push(t - 1);
                }
                if (t >= y)
                    continue;
                if ( 2 * t < 1000100 && (!d[2*t] || d[2*t] > d[t] + 1))
                {
                    d[2*t] = d[t] + 1;
                    q.push(2*t);
                }
                if (t + 1 < 1000100 && (!d[t + 1] || d[t + 1] > d[t] + 1))
                {
                    d[t + 1] = d[t] + 1;
                    q.push(t + 1);
                }
            }
        }
    
        return 0;
    }
     
  • 相关阅读:
    PAT 1065. A+B and C (64bit) (20)
    PAT 1042. Shuffling Machine (20)
    PAT 1001. A+B Format (20)
    HDU 2082 找单词 母函数
    NYOJ 138 找球号(二) bitset 二进制的妙用
    POJ 1151 Wormholes spfa+反向建边+负环判断+链式前向星
    POJ 1511 Invitation Cards 链式前向星+spfa+反向建边
    zzuli 2130: hipercijevi 链式前向星+BFS+输入输出外挂
    NYOJ 323 Drainage Ditches 网络流 FF 练手
    POJ 1273 Drainage Ditches 网络流 FF
  • 原文地址:https://www.cnblogs.com/zbtrs/p/7277265.html
Copyright © 2020-2023  润新知