http://acm.hdu.edu.cn/showproblem.php?pid=1548

A strange lift

Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others)

Total Submission(s): 11341    Accepted Submission(s): 4289

Problem Description
There is a strange lift.The lift can stop can at every floor as you want, and there is a number Ki(0 <= Ki <= N) on every floor.The lift have just two buttons: up and down.When you at floor i,if you press
the button "UP" , you will go up Ki floor,i.e,you will go to the i+Ki th floor,as the same, if you press the button "DOWN" , you will go down Ki floor,i.e,you will go to the i-Ki th floor. Of course, the lift can't go up high than N,and can't go down lower
than 1. For example, there is a buliding with 5 floors, and k1 = 3, k2 = 3,k3 = 1,k4 = 2, k5 = 5.Begining from the 1 st floor,you can press the button "UP", and you'll go up to the 4 th floor,and if you press the button "DOWN", the lift can't do it, because
it can't go down to the -2 th floor,as you know ,the -2 th floor isn't exist.

Here comes the problem: when you are on floor A,and you want to go to floor B,how many times at least he has to press the button "UP" or "DOWN"?
 
Input
The input consists of several test cases.,Each test case contains two lines.

The first line contains three integers N ,A,B( 1 <= N,A,B <= 200) which describe above,The second line consist N integers k1,k2,....kn.

A single 0 indicate the end of the input.
 
Output
For each case of the input output a interger, the least times you have to press the button when you on floor A,and you want to go to floor B.If you can't reach floor B,printf "-1".
 
Sample Input
5 1 5
3 3 1 2 5
0
 
Sample Output
3
 AC代码:

<span style="font-size:24px;">#include<iostream>
#include<cstdio>
#include<cstring>
#include<cmath>
#include<algorithm>
#include<queue>
using namespace std; const int maxn = 201;
int n, a, b;
int kp[maxn];
bool mark[maxn];
struct Node {
int floor;
int tme;
}; int BFS() {
memset(mark, false, sizeof(mark));
queue<Node> Q;
Node first, next_up, next_down;
first.tme = 0;
first.floor = a;
Q.push(first);
mark[a] = true; //标记 while (!Q.empty()) {
first = Q.front();
Q.pop(); if (first.floor == b) {
return first.tme;
}
next_up.floor = first.floor + kp[first.floor];
if (next_up.floor <= n && !mark[next_up.floor ]) {
next_up.tme = first.tme + 1;
mark[next_up.floor] = true;
Q.push(next_up);
}
next_down.floor = first.floor - kp[first.floor];
if (next_down.floor >= 1 && !mark[next_down.floor]) {
next_down.tme = first.tme + 1;
mark[next_down.floor] = true;
Q.push(next_down);
}
}
return -1;
} int main() { while (~scanf("%d", &n), n ) {
scanf("%d%d", &a, &b);
for (int i = 1; i <= n; i++) {
scanf("%d", &kp[i]);
} //输入
int res = BFS();
printf("%d\n", res);
}
}</span>

最新文章

  1. 格式工厂 v4.0.0 最新去广告绿色纯净版
  2. 在C#中使用Spire.doc对word的操作总结
  3. [goa]golang微服务框架学习(二)-- 代码自动生成
  4. IOS Animation-CABasicAnimation、CAKeyframeAnimation详解&amp;区别&amp;联系
  5. Convert.ChangeType不能处理Nullable类型的解决办法
  6. java中的不为空判断
  7. IIS 7.0 and Web Farms
  8. BZOJ1271: [BeiJingWc2008]秦腾与教学评估
  9. linux安装 Android Studio详细教程,支持性较差,需要安装最新底层库内核的linux
  10. PHP 1:在Windows上安装和配置PHP,Apache和My SQL
  11. HUST 1585 排队
  12. java-StringBuffer学习笔记
  13. 微信公众号网页授权登录--JAVA
  14. Jenkins系统监测(转)
  15. 项目部署Vue+Django(luffy)
  16. MyBatis-generator-Maven方式
  17. 51Nod-1441 士兵的数字游戏
  18. (转)mybatis热加载(依赖mybatis-plus插件)的实现
  19. LINUX 内核 API
  20. pyspider示例代码五:实现自动翻页功能

热门文章

  1. vs2012 jsoncpp 链接错误
  2. Codeforces_766_C_(dp)
  3. layui修改数据的时候下拉框和选择框默认选中
  4. thymeleaf的使用及配置
  5. enote笔记语言(3)(ver0.4)
  6. [USACO] 奶牛混合起来 Mixed Up Cows
  7. 初遇Java
  8. Scoop - 在Windows命令行上进行程序安装
  9. CentOS 6磁盘管理
  10. CentOS \Linux文件权限详解