记录编号 220159 评测结果 AAAAAAAAAA
题目名称 [HDU 1548] 奇怪的电梯 最终得分 100
用户昵称 GravatarHzoi_ 是否通过 通过
代码语言 C++ 运行时间 0.052 s
提交时间 2016-01-17 16:19:34 内存使用 0.48 MiB
显示代码纯文本
//#define LOCAL
#include<iostream>
#include<cstdio>
#include<cstring>
#include<vector>
#include<map>
#include<algorithm>
#include<cmath>
using namespace std;
template<typename T>
struct queue
{
private:
	static const int maxn=1010;
	T a[maxn];
	int head,tail;
public:
	queue()
	{
		memset(a,0,sizeof(a));
		head=tail=0;
	}
	void clear()
	{
		queue();
	}
	int size()
	{
		return head>tail?tail-head+maxn:tail-head;
	}
	int empty()
	{
		return size()==0;
	}
	void push(const T& n)
	{
		a[tail++]=n;
		if(tail==maxn) tail=0;
	}
	T pop()
	{
		T n=a[head++];
		if(head==maxn) head=0;
		return n;
	}
	T& front()
	{
		return a[head];
	}
	T& end()
	{
		return a[tail-1];
	}
	bool in(const int &n)
	{
		for(int i=0;i<size();i++) if(a[head+i>=maxn?head+n-maxn:head+n]==n) return 1;
		return 0;
	}
	T& operator [] (const int& n)
	{
		if(head+n>=maxn) return a[head+n-maxn];
		return a[head+n];
	}
};
template<typename T>
struct stack
{
private:
	static const int maxn=1010;
	int len;
	T a[maxn];
public:
	stack()
	{
		memset(a,0,sizeof(a));
		len=0;
	}
	void push(const T& n)
	{
		if(len>=maxn) return;
		a[len++]=n;
	}
	T& top()
	{
		return a[len-1];
	}
	T pop()
	{
		if(len<=0) return 0x7fffffff;
		return a[--len];
	}
	bool empty()
	{
		return len==0;
	}
	int size()
	{
		return len;
	}
	T& operator [] (const int &n)
	{
		return a[n];
	}
};
const int maxn=210;
int dis[maxn][maxn],n,a,b;
int main()
{
#ifndef LOCAL
	freopen("lift.in","r",stdin);
	freopen("lift.out","w",stdout);
#endif
	memset(dis,63,sizeof(dis));
	cin>>n>>a>>b;
	for(int i=1;i<=n;i++) dis[i][i]=0;
	for(int i=1;i<=n;i++)
	{
		int num;
		cin>>num;
		if(!num) continue;
		if(i+num<=n) dis[i][i+num]=1;
		if(i-num>0) dis[i][i-num]=1;
	}
	for(int k=1;k<=n;k++) for(int i=1;i<=n;i++) for(int j=1;j<=n;j++) dis[i][j]=min(dis[i][j],dis[i][k]+dis[k][j]);
	if(dis[a][b]==1061109567) cout<<-1;
	else cout<<dis[a][b];
#ifndef LOCAL
	fclose(stdin);fclose(stdout);
#endif
	return 0;
}