xcoj 1227 电梯
2016-04-08 17:23
204 查看
1227: 电梯
时间限制: 1 Sec 内存限制: 128 MB提交: 69 解决: 11
标签
提交统计讨论版
题目描述
实验楼有一部神秘的电梯,它只有“上”和“下”两个按钮,实验楼的每一层都标有一个值K,第i层的值为Ki,如果按了“上”按钮,会从第i层升到第i+Ki层;如果按了“下”按钮则会从第i层降到第i-Ki层,已知能到的层数为1到N层,GX想从第A层上到第B层,现在给你N,A,B和一串数K1到Kn,请求出GX从A到B,至少按下多少个按钮。输入
第一行输入N,A,B( 1 <= N,A,B <= 300) ,表示实验楼共有N层,起点为A,终点为B第二行输入N个数,表示K1到Kn
输出
对于每组数据,输出一个数,表示GX从A到B,至少按下多少个按钮,如果GX无法到达B,请输出-1.样例输入
5 1 5 3 3 1 2 5样例输出
3http://xcacm.hfut.edu.cn/problem.php?id=1227
dijskura+priority_queue
一点小问题都不能犯啊,错了好几次.....
//#include<bits/stdc++.h>
#include<iostream>
#include<cstdio>
#include<string>
#include<sstream>
#include<cstdlib>
#include<cstring>
#include<cctype>
#include<algorithm>
#include<stack>
#include<queue>
#include<map>
#include<set>
#include<vector>
#include<deque>
#include<cmath>
#include<climits>
#include<list>
#include<utility>
#include<memory>
#include<cstddef>
#include<iterator>
#include<iomanip>
using namespace std;
typedef long long LL;
typedef long double LD;
const double pi = acos(-1.0);
///////////////////////////////
int st[304];
int d[304];
void init() {
for (int i = 0; i <= 303; i++) {
st[i] = 0;
d[i] = 0x3f3f3f3f;
}
}
///////////////////////////////
int main(int argc, char**argv) {
ios_base::sync_with_stdio(0); cin.tie(0);
//freopen("input.txt", "r", stdin);
//freopen("output.txt", "w", stdout);
////////////////////////////
int N, A, B;
while (cin >> N >> A >> B) {
init();
for (int i = 1; i <= N; i++) {
cin >> st[i];
}
priority_queue<pair<int, int> >Q;
d[A] = 0;
Q.push(make_pair(-d[A], A));
while (!Q.empty()) {
int T = Q.top().second;
Q.pop();
if (T + st[T] <= N) {
if (d[T + st[T]] > d[T] + 1) {
d[T + st[T]] = d[T] + 1;
Q.push(make_pair(-d[T + st[T]], T + st[T]));
}
}
if (T - st[T] >= 1) {
if (d[T - st[T]] > d[T] + 1) {
d[T - st[T]] = d[T] + 1;
Q.push(make_pair(-d[T - st[T]], T - st[T]));
}
}
}
if (d[B] == 0x3f3f3f3f) {
cout << "-1\n";
}
else {
cout << d[B] << endl;
}
}
////////////////////////////
//system("pause");
return 0;
}
//END
相关文章推荐
- 书评:《算法之美( Algorithms to Live By )》
- 动易2006序列号破解算法公布
- Ruby实现的矩阵连乘算法
- C#插入法排序算法实例分析
- 超大数据量存储常用数据库分表分库算法总结
- C#数据结构与算法揭秘二
- C#冒泡法排序算法实例分析
- 算法练习之从String.indexOf的模拟实现开始
- C#算法之关于大牛生小牛的问题
- C#实现的算24点游戏算法实例分析
- c语言实现的带通配符匹配算法
- 浅析STL中的常用算法
- 算法之排列算法与组合算法详解
- C++实现一维向量旋转算法
- Ruby实现的合并排序算法
- C#折半插入排序算法实现方法
- 基于C++实现的各种内部排序算法汇总
- C++线性时间的排序算法分析
- C++实现汉诺塔算法经典实例
- PHP实现克鲁斯卡尔算法实例解析