1. /*
  2. 农夫John的奶牛跑路了。将地图视作一条数轴,John的初始位置在s而奶牛的位置在t(0<=s,t<=100000)。John可以花费一分钟的时间使自己作如下移动:
  3.  
  4. 1 从点x移动到点x+1
  5. 2 从点x移动到点x-1
  6. 3 从点x移动到点x*2
  7. 奶牛的位置一直在点t。现在给定s,t,要求John要追上奶牛最少需要几分钟。
  8.  
  9. Sample Input:
  10. 5 17
  11.  
  12. Sample Output:
  13. 4
  14.  
  15. Description:
  16. 5->4->8->16->17
  17. */
  18.  
  19. #include<iostream>
  20. #include<queue>
  21. #include<cmath>
  22. #include<cstdlib>
  23. #include<cstdio>
  24. #include<cstring>
  25. using namespace std;
  26. const int M=;
  27.  
  28. int bfs(int s,int t)
  29. {
  30. queue<int> q;
  31. int head,next;
  32. int vis[M],step[M];
  33. memset(vis,,sizeof(vis));
  34. memset(step,,sizeof(step));
  35. q.push(s);
  36. step[s]=;
  37.  
  38. while(!q.empty())
  39. {
  40. head=q.front();
  41. q.pop();
  42. for(int i=;i<;i++)
  43. {
  44. if(i==)
  45. next=head-;
  46. if(i==)
  47. next=head+;
  48. if(i==)
  49. next=head*;
  50. if(next<||next>M)
  51. continue;
  52. if(vis[next]==)
  53. {
  54. vis[next]++;
  55. step[next]=step[head]+;
  56. q.push(next);
  57. }
  58. if(next==t)
  59. return step[next];
  60. }
  61. }
  62. }
  63.  
  64. int main()
  65. {
  66. int s,t;
  67. while(scanf("%d %d",&s,&t)==&&s>=&&t<=M)
  68. {
  69. if(t<=s)//牛在人后面
  70. cout<<abs(s-t)<<endl;
  71. else
  72. cout<<bfs(s,t)<<endl;
  73. }
  74.  
  75. return ;
  76. }
  77.  
  78. /*
  79. #include<iostream>
  80. #include<queue>
  81. #include<cstring>
  82. #include<cstdio>
  83. using namespace std;
  84.  
  85. const int maxn=100001;
  86.  
  87. bool vis[maxn];//标记数组
  88. int step[maxn];//记录到了每一位置所走的步数
  89. queue <int> q;//定义队列
  90.  
  91. int bfs(int n,int k)
  92. {
  93. int head,next;
  94. q.push(n); //开始FJ在n位置,n入队
  95. step[n]=0;
  96. vis[n]=true; //标记已访问
  97. while(!q.empty()) //当队列非空
  98. {
  99. head=q.front(); //取队首
  100. q.pop(); //弹出对首
  101. for(int i=0;i<3;i++) //FJ的三种走法
  102. {
  103. if(i==0) next=head-1;
  104. else if(i==1) next=head+1;
  105. else next=head*2;
  106. if(next<0 || next>=maxn) continue; //排除出界情况
  107. if(!vis[next]) //如果next位置未被访问
  108. {
  109. q.push(next); //入队
  110. step[next]=step[head]+1; //步数+1
  111. vis[next]=true; //标记已访问
  112. }
  113. if(next==k) return step[next]; //当遍历到结果,返回步数
  114. }
  115. }
  116. }
  117. int main()
  118. {
  119. int n,k;
  120. while(cin>>n>>k)
  121. {
  122. memset(step,0,sizeof(step));
  123. memset(vis,false,sizeof(vis));
  124.  
  125. while(!q.empty()) q.pop(); //注意调用前要先清空
  126. if(n>=k) printf("%d\n",n-k);
  127. else printf("%d\n",bfs(n,k));
  128. }
  129. return 0;
  130. }
  131. */
  132.  
  133. /*
  134. #include<iostream>
  135. #include<queue>
  136. #include<cstring>
  137. #include<cstdio>
  138. #include <algorithm>
  139. using namespace std;
  140.  
  141. queue<int> q;
  142. int m,n;
  143. int step[100010];
  144. int vis[100010];
  145. int rear,front;//rear表示下一步
  146. int BFS(){
  147. int i;
  148. q.push(n);//把农民的位置压入队列
  149. step[n]=0;//步数记为0
  150. vis[n]=1;////标记这个点走过
  151. while(!q.empty()){//队列不为空哦时执行
  152. front=q.front();//最开始的位置
  153. q.pop();//弹出队列头
  154. for(i=0;i<3;i++)//三种走法,三种循环
  155. {
  156. if(i==0)
  157. rear=front+1;//第一种下一步+1
  158. if(i==1)
  159. rear=front-1;//第二种下一步-1
  160. if(i==2)
  161. rear=front*2;//第三种步数翻倍
  162. if(rear>=0&&rear<=100000&&vis[rear]==0)//判断是否越界,并且这一步没有走过
  163. {
  164. vis[rear]=1;//标记这一步走过了
  165. step[rear]=step[front]+1;// 步数+1
  166. q.push(rear);//将当前位置压入队列
  167. }
  168. if(rear==m)return step[rear];
  169. }
  170. }return -1;
  171.  
  172. }
  173.  
  174. int main()
  175. {
  176.  
  177. cin>>n>>m;
  178. memset(step,0,sizeof(step));//初始化为0
  179. memset(vis,0,sizeof(vis));//初始化为false
  180. cout<<BFS();
  181.  
  182. return 0;
  183. }
  184. */

tz@HZAU

2019/3/4

【OJ】抓牛问题的更多相关文章

  1. NOIP模拟赛 抓牛

    [题目描述] 农夫约翰被通知,他的一只奶牛逃逸了!所以他决定,马上出发,尽快把那只奶牛抓回来. 他们都站在数轴上.约翰在N(O≤N≤100000)处,奶牛在K(O≤K≤100000)处.约翰有两种办法 ...

  2. ACM/ICPC 之 BFS-广搜+队列入门-抓牛(POJ3278)

    这一题是练习广度优先搜索很好的例题,在很多广搜教学中经常用到,放在这里供学习搜索算法的孩纸们看看= = 题目大意:一维数轴上,农夫在N点,牛在K点,假定牛不会移动,农夫要找到这头牛只能够进行以下三种移 ...

  3. [Swust OJ 781]--牛喝水

    Time limit(ms): 1000 Memory limit(kb): 65535   The cows have a line of 20 water bowls from which the ...

  4. B - Catch That Cow (抓牛)

    B - Catch That Cow Time Limit:2000MS     Memory Limit:65536KB     64bit IO Format:%I64d & %I64u ...

  5. 关于ACM,关于CSU

    原文地址:http://tieba.baidu.com/p/2432943599 前言: 即将进入研二,ACM的事情也渐渐远去,记忆终将模糊,但那段奋斗永远让人热血沸腾.开个贴讲讲ACM与中南的故事, ...

  6. POJ 3278Catch That Cow

    http://poj.org/problem?id=3278 大意是说牛在原地不动,他在某点去抓牛,他有两种方式可以走,第一种走一步,往前往后都可,第二种是走现在所在点的两倍的数目.只要能够刚好到达牛 ...

  7. 9.23 noip模拟试题

      Problem 1 抓牛(catchcow.cpp/c/pas) [题目描述] 农夫约翰被通知,他的一只奶牛逃逸了!所以他决定,马上出发,尽快把那只奶牛抓回来. 他们都站在数轴上.约翰在N(O≤N ...

  8. NOIP2014-6-14模拟赛

    Problem 1 抓牛(catchcow.cpp/c/pas) [题目描述] 农夫约翰被通知,他的一只奶牛逃逸了!所以他决定,马上出发,尽快把那只奶牛抓回来. 他们都站在数轴上.约翰在N(O≤N≤1 ...

  9. 2017.07.06【NOIP提高组】模拟赛B组

    Summary 今天比赛感觉题目很奇葩,都可以用许多简单方法来做,正确性都显然,当然也有点水,也就是说是考我们的数感和数学知识,而程序,只是代码的体现. 这次的时间安排感觉不错,因为很快就打完最后一道 ...

随机推荐

  1. conda安装cv2库

    conda install opencv-python或者 pip install opencv-python(不过好像是这个比较有效)

  2. Linux 首先基本包安装(vim啊什么的),源,源优化,项目架构介绍, (LNMuWsgi)Django项目相关软件mysql,redies,python(相关模块)安装配置测试

    内容 补充: 查看已启动服务的端口 netstat -tulnp |grep (方式1) ss -tulnp|grep (方式2) 前期铺垫: . Linux要能上网 . 掌握Linux软件包安装方法 ...

  3. Bootstrap modal常用参数、方法和事件

    Bootstrap modal(模态窗)常用参数.方法和事件: 参数: 名称 类型 默认值 描述 Backdrop Boolean或字符串“static” True True:有背景,点击modal外 ...

  4. Ubuntu18.04 LTS 安装部署golang最新版本1.10

    1 步骤 //1 直接安装golang-go 目前最新版本是1.10 sudo apt-get install golang-go //2 向/etc/profile追加以下代码 sudo vim / ...

  5. Windows系统中python3.7安装数据可视化模块Matplotlib、numpy的各种方法汇总

    安装环境:Windows10 64位Python3.7 32位 确保已经安装PIP工具命令窗口输入PIP出现以下窗口说明PIP已经成功安装 方法1:(1)在Matplotlib的官网下载电脑对应的版本 ...

  6. vue 父子之间通信及非父子之间通信

    直接看图说话 vue Bus总线 import Vue from 'vue';import VueBus from 'vue-bus';Vue.use(VueBus); 这是子组件要发到父组件的写法 ...

  7. 阿里云各Linux发行版netcore兼容性评估报告---来自大石头的测试

    阿里云各Linux发行版netcore兼容性评估报告---来自大石头的测试 结论:    优先选择CentOS/Ubuntu,可选AliyunLinux(CentOS修改版)              ...

  8. Java组合模式

    定义:将对象组合成树形结构以表示  部分--整体的层次结构 组合模式使客户端对单个对象和组合对象保持一致的方式处理 类型:结构型 优点: 1.清楚地定义分层次的复杂对象,表示对象的全部去或部分层次 2 ...

  9. BsonJavaScript

    BsonJavaScript主要应用于mongodb驱动中 1.进行数据分组 MongoClient client = new MongoClient(host.ConnectionString); ...

  10. 初识Python,简单初学代码

    第一个自己手写的代码~ If 与 Elif #!/usr/bin/env python # - * - coding:uft8 - * - Inp = input ( '请输入你的会员级别' ) if ...