K11505 The Lost cow[USACO-2017-USOpen-B]

题目描述

Farmer John最珍贵的奶牛Bessie丢了,他需要把它找回来。

幸运的是,农场里只有一条长长的直路,他知道Bessie肯定在这条路上的某个地方。如果我们把这条路看成数轴,假设Farmer John所在位置是x,Bessie所在的位置是y(对于John是未知的),如果Farmer John知道Bessie的位置,那么他就可以直接走过去,步行的距离是|x-y|.但不幸的是,外面非常黑,Farmer John什么都看不见,他只能沿着路来来回回的走直到他最终遇到Bessie。

为了找到最佳的寻找Bessie的方法,Farmer John参考了一些计算机科学研究文献,发现计算机科学家们确实研究过“丢失的奶牛”的问题。文献中建议Farmer John找到Bessie的解决方案是:

Farmer John先从初始位置x,走到x+1的位置,然后反方向走到x-2的位置,然后在调走走到x+4位置,等等。这种模式为成为“Z字形”模式,这种模式中,每一步达到的位置与初始位置的距离差都是上一步的两倍。这种方法表示,最坏的情况下他需要走9倍的|x-y|的直线距离才能找到Bessie。

Farmer John对这个结果非常好奇,现在给定x和y,请计算出如果采用这种"Z字形"模式,Farmer John在找到Bessie前,他一共需要走的路程的总距离。

输入格式

输入是一行,包含两个用空格隔开的整数,分别代表x和y。x和y的范围都是0~1000

输出格式

输出仅一行,表示在找到Bessie前,Farmer John一共需要走的路程的总距离。

输入输出样例

输入样例1:
3 6
输出样例1:
9

【耗时限制】1000ms 【内存限制】128MB

首先,这题应该用模拟的方法来解决,可以模拟Farmer John的行走路径,再算路程总和

代码:

#include <iostream>
#include <bits/stdc++.h>
using namespace std;
typedef long long LL;
LL x,y,cnt=0;
int main()
{
    cin>>x>>y;
    LL end=9*abs(x-y),num=1,x1=x,h=0;
    while(cnt<=end){              //这里也可以写死循环
        h=x+num;
        if(y>=x1&&y<=h){cnt+=abs(y-x1);break;}
        else cnt+=abs(h-x1);
        x1=h;
        num*=-2;
        //分界线,上面是正,下面是负
        h=x+num;
        if(y<=x1&&y>=h){cnt+=abs(y-x1);break;}
        else cnt+=abs(h-x1);
        x1=h;
        num*=-2;
    }
    cout<<cnt;
    return 0;
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值