社区讨论

60pts求助

P3403跳楼机参与者 3已保存回复 3

讨论操作

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

当前回复
3 条
当前快照
1 份
快照标识符
@lo9irxlm
此快照首次捕获于
2023/10/28 12:05
2 年前
此快照最后确认于
2023/10/28 12:05
2 年前
查看原帖
CPP
#include<bits/stdc++.h>
using namespace std;
struct node{
	long long  v,w;
	node (long long  uu,long long vv){
		v=uu;
		w=vv;
	}
};
const long long N=1000010;
vector<node> G[N];
set<pair<long long,long long > > min_heap;
long long d[N];
void init(){
	for(int i=1;i<=N;i++){
		d[i]=0x3f3f3f3f3f3f;
	}
}
int main(){
	long long h,x,y,z;
	cin>>h>>x>>y>>z;
	for(long long  i=0;i<z;i++){
		G[i].push_back(node((i+x)%z,x));
		G[i].push_back(node((i+y)%z,y));
	}
	 init();
	 d[0]=1;
	 min_heap.insert(make_pair(1,0));
	 while(min_heap.size()){
	 	long long  mind=min_heap.begin() ->first;
	 	long long  v=min_heap.begin() ->second;
	 	min_heap.erase(min_heap.begin());
	 	for(long long  i=0;i<G[v].size();i++){
	 		if(d[G[v][i].v]>d[v]+G[v][i].w) {
	 			min_heap.erase(make_pair(d[G[v][i].v],G[v][i].v));
	 			d[G[v][i].v]=d[v]+G[v][i].w;
				min_heap.insert(make_pair(d[G[v][i].v],G[v][i].v));
			 }
		 }
	 }
	 long long  ans=0;
	 for(long long  i=0;i<z;i++){
	 	if(d[i]<=h){
	 		ans+=(h-d[i])/z+1;
		 }
	 }
	 cout<<ans;
}

回复

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

正在加载回复...