失去的母牛
来源:互联网 发布:跳舞毯软件 编辑:程序博客网 时间:2024/04/30 10:04
失去的母牛
文件名(lostcow.cpp)
题目描述
FJ丢失了他引以为傲的牛Bessie,他必须找到他!
幸运的是,农场间只有一条长路径,而且FJ知道Bessie会在这条路的一些点上。如果我们把这条路看作一条数轴,那么FJ现在在x点上,而Bessie在y点上(FJ不确定)。如果FJ只知道Bessie大致在哪里,他只能径直向它走|x-y|的距离。不幸的是,由于黑山老树精的出没,外面很黑,FJ看不见任何东西。他唯一能找到Bessie的办法是来回走动直到他最终到达了Bessie所在的位置。
为了找出搜索的最佳方案,FJ咨询了信息大佬——Aico(黄加瑜)。Aico告诉他这是个经典的计算机问题,叫做“Lost Cow Problem”(丢失牛问题)(这是真的!)。
FJ找牛的最佳方案是先移动到x+1的位置,然后反向移动到x-2,接着是x+4,以此类推。在一个“之字形”模式中,他每一步移动后离起点的距离是上一步时离起点距离的两倍(x+1,x-2,x+4)。正如他在学习“丢失牛问题”算法时一样,这种方式能让他在最坏情况下总共走9倍的实际距离(|x-y|)。(这也是真的!9倍实际距离实际上就是这种算法最坏的情况)
Farmer John想去验证这个结果。已知x和y,请编程计算他找到Bessie所行走的距离。
输入输出格式
输入格式:(lostcow.in)
一行两个数据 x和y。
输出格式:(lostcow.out)
一个数据,表示Farmer John将前往Bessie的距离。
输入输出样例
输入样例:
3 6
输出样例:
9
数据范围
0<=x,y<=1000
这就是一道模拟,一步一步移动,在移动过程中判断是否到达。
#include<bits/stdc++.h>
using namespace std;
int x,y,a[15]={0,1,-2,4,-8,16,-32,64,-128,256,-512,1024,-2048,4098},j=0,s=0;
void work(int t)
{
s++;
if (t==y)
{
cout<<s<<endl;
exit(0);
}
}
int main()
{
freopen("lostcow.in","r",stdin);
freopen("lostcow.out","w",stdout);
scanf("%d%d",&x,&y);
y-=x;
x=0;
while (1)
{
j++;
if (a[j-1]<a[j])
for (int i=a[j-1]+1;i<=a[j];++i)
work(i);
else
for (int i=a[j-1]-1;i>=a[j];--i)
work(i);
}
return 0;
}
而我的方法做了一个很玄学的操作:我用一个a数组用来存它每一步移动后离起点的距离,因为它都是2的幂,而且数据规模也很小,所以我才会想到这个方法。然后我假设它的起点为0,我就可以直接加减。所以我对它的输入数据进行了一波操作,把起点变为原点,终点也随之改变,这样就成了一条数轴。可是,主要是方向有反,它又要求一步一步移动,所以循环应该有顺有倒,所以我才用了一个函数,方便一点。
- 失去的母牛
- 母牛的故事
- hdu_2018_母牛的故事
- HDOJ2018 母牛的故事
- 母牛的故事
- 2018 母牛的故事
- HDOJ2018 母牛的故事
- hdu2018母牛的故事
- HDU_2018 母牛的故事
- hdoj_2018 母牛的故事
- 母牛的故事
- 母牛的故事
- hdu-母牛的故事
- 母牛的故事
- 母牛的故事
- 母牛的故事
- 母牛的故事
- 母牛的故事
- 优化分享5
- java 好文章
- Go(GoLang)配置Grpc+ProtoBuf所需的一些资源
- 优化分享6
- 优化分享7
- 失去的母牛
- [干货]系统吞吐量(TPS)、用户并发量、性能测试概念和公式
- 优化分享8
- ExpandableListView 实现三级菜单中grou_item与child_item点击无响应
- 优化分享9
- NLP03-Gensim转换与相似计算
- Arrays的常用功能
- 优化分享10
- Android第三方框架(不断更新中)