60分求助,玄关!
查看原帖
60分求助,玄关!
1036002
yjjh楼主2024/7/8 11:34
#include <bits/stdc++.h>
using namespace std;
const int N=501;
int n,m,ans=-1;
int dt[N],k[N];
std::queue<int>q1;
std::queue<int>q2;
inline void bbfs(int x,int bs){
	if(x+k[bs]>=0&&x+k[bs]<=m&&dt[x-k[bs]]<x+k[bs]){
		if(bs==n){
			ans=max(ans,x+k[bs]);
			return;
		}
		q1.push(x+k[bs]);q2.push(bs+1),dt[x+k[x]]=x+k[bs];
	}
	if(x-k[bs]>=0&&x-k[bs]<=m&&dt[x-k[bs]]<x-k[bs]){
		if(bs==n){
			ans=max(ans,x-k[bs]);
			return;
		}
		q1.push(x-k[bs]);q2.push(bs+1),dt[x-k[x]]=x-k[bs];
	}
}
inline void bfs(){
	while(q1.size()){
		bbfs(q1.front(),q2.front());
		q1.pop();q2.pop();
	}
}
int main(){
	int a;
	std::cin >>n>>a>>m;
	for(int i=1;i<=n;i++)std::cin >>k[i];
	q1.push(a);q2.push(1);
	bfs();
	std::cout <<ans;
	return 0;
}
2024/7/8 11:34
加载中...