社区讨论

MLE 求助

P9455 [入门赛 #14] 塔台超频 (Hard Version)参与者 4已保存回复 4

讨论操作

快速查看讨论及其快照的属性,并进行相关操作。

当前回复
4 条
当前快照
1 份
快照标识符
@lo26nuuj
此快照首次捕获于
2023/10/23 08:52
2 年前
此快照最后确认于
2023/11/03 09:07
2 年前
查看原帖
CPP
#include<iostream>
#include<queue>
#include<cmath>
#include<string.h>
#include<bitset>
#include<list>

using namespace std;

struct point{
	int place;
	int fanwei; 
};

point *map;
int n;
bool *visited;
queue<int,list<int> > work;

bool bfs(int k){
	for(int i=1;i<=n;i++)
		visited[i]=0;
	while(!work.empty())
		work.pop(); 
	work.push(1);
	while(work.empty()!=1){
		int front=work.front();
		work.pop();
		if(visited[front])
			continue;
		visited[front]=1;
		for(int i=1;i<=n;i++){
			if(abs(map[i].place-map[front].place)<=map[front].fanwei+k&&!visited[i]){
				work.push(i);
			}
		}
	}
	return visited[n];
}

int check(int k){
	return bfs(k);
}

int erfen(int from,int to){
	while(from!=to){
		int mid=(from+to)/2;
		if(check(mid)){
			to=mid;
		}
		else{
			from=mid+1;
		}
	}
	return from;
}

int main(){
	cin>>n;
	map=new point[n+1];
	visited=new bool[n+1];
	for(int i=1;i<=n;i++){
		cin>>map[i].place>>map[i].fanwei;	
	}
	cout<<erfen(0,2000000000);
}

回复

4 条回复,欢迎继续交流。

正在加载回复...