zoukankan      html  css  js  c++  java
  • 洛谷——P1588 丢失的牛

    https://www.luogu.org/problem/show?pid=1588

    题目描述

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

    输入输出格式

    输入格式:

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

    输出格式:

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

    输入输出样例

    输入样例#1:
    1 
    5 17
    输出样例#1:
    4

     1 #include <cstring>
     2 #include <cstdio>
     3 
     4 inline void read(int &x)
     5 {
     6     x=0; register char ch=getchar();
     7     for(; ch>'9'||ch<'0'; ) ch=getchar();
     8     for(; ch>='0'&&ch<='9'; ch=getchar()) x=x*10+ch-'0';
     9 }
    10 
    11 const int N(1e5+5);
    12 bool vis[N];
    13 struct Queue {
    14     int pos,step;
    15 }que[N];
    16 
    17 int AC()
    18 {
    19     int t,poe,cow; read(t);
    20     for(; t--; )
    21     {
    22         read(poe),read(cow);
    23         if(cow<poe)
    24         {
    25             printf("%d
    ",poe-cow);
    26             continue;
    27         }
    28         int tail=0,head=0;
    29         memset(que,0,sizeof(que));
    30         memset(vis,0,sizeof(vis));
    31         que[++tail].pos=poe;
    32         que[tail].step=0;
    33         vis[poe]=1;
    34         for(int now,step; head<tail; )
    35         {
    36             now=que[++head].pos;
    37             step=que[head].step;
    38             if(now==cow)
    39             {
    40                 printf("%d
    ",step);
    41                 break;
    42             }
    43             if((now+1)<=N&&!vis[now+1])
    44             {
    45                 vis[now+1]=1;
    46                 que[++tail].pos=now+1;
    47                 que[tail].step=step+1;
    48             }
    49             if((now-1)>0&&!vis[now-1])
    50             {
    51                 vis[now-1]=1;
    52                 que[++tail].pos=now-1;
    53                 que[tail].step=step+1;
    54             }
    55             if((now<<1)<=N&&!vis[now<<1])
    56             {
    57                 vis[now<<1]=1;
    58                 que[++tail].pos=now<<1;
    59                 que[tail].step=step+1;
    60             }
    61         }
    62     }
    63     return 0;
    64 }
    65 
    66 int Aptal=AC();
    67 int main(){;}
    ——每当你想要放弃的时候,就想想是为了什么才一路坚持到现在。
  • 相关阅读:
    我所理解的三次握手
    网络舆情——初步了解
    【转载】位运算的密码
    【转载】基础排序算法简介
    【原创】关于hashcode和equals的不同实现对HashMap和HashSet集合类的影响的探究
    【原创】Java移位运算
    【原创】MapReduce计数器
    【原创】Hadoop机架感知对性能调优的理解
    【原创】一个复制本地文件到Hadoop文件系统的实例
    【转载】JAVA IO 流的总结
  • 原文地址:https://www.cnblogs.com/Shy-key/p/7506529.html
Copyright © 2011-2022 走看看