求此题第一个点的数据,谢谢!
查看原帖
求此题第一个点的数据,谢谢!
91975
GVNDN楼主2020/7/31 19:49

全都TLE。今天没下载次数了。唉。

#include<iostream>
#include<queue>
#include<cstring>
using namespace std;

const int maxn = 205;
int n, a, b;
int delta[maxn], ans[maxn];    //delta[n] = d:第n层+-d层 
int op[] = {1, -1};
queue<int> q;

int main(){
	cin >> n >> a >> b;
	memset(ans, -1, sizeof(ans));
	ans[a] = 0;
	for(int i = 1; i <= n; i++)
		cin >> delta[i];
	q.push(1);
	while(!q.empty()){
		int cur_f = q.front();
//		cout << "current floor = " << cur_f << endl;
		q.pop();
		for(int i = 0; i < 2; i++){
			int new_f = cur_f + op[i] * delta[cur_f];
			if(new_f < 1 || new_f > n)
				continue;
//			cout << "new floor = " << new_f << "    ";
			ans[new_f] = ans[cur_f] + 1;
			q.push(new_f);
		}
	}
	cout << ans[b];
	return 0;
}
2020/7/31 19:49
加载中...