求助
  • 板块P2620 虫洞
  • 楼主封禁用户
  • 当前回复0
  • 已保存回复0
  • 发布时间2025/2/8 13:40
  • 上次更新2025/2/8 15:48:52
查看原帖
求助
849602
封禁用户楼主2025/2/8 13:40
#include<bits/stdc++.h>
using namespace std;
int w,st,p,c,l[111],x[51],y[51],d[111][111];
set<int>s;
int ds(int b,int d){
	if(b==d)return 0;
	if(s.count(b))return 0x3fffffff;
	int k=d;
	for(int i=1;i<=p;i++){
		if(b<x[i]&&x[i]<k&&(x[i]-b)%st==0)k=x[i];
	}
	if(k!=d&&s.count(k))k--;
	if(k==b)return 0x3fffffff;
	return ds(k,d)+(k-b+st-1)/st;
}
int q(int x){
	return lower_bound(l+1,l+c+1,x)-l-1;
}
void f(){
	for(int k=1;k<=c;k++)for(int i=1;i<=c;i++)for(int j=1;j<=c;j++)d[i][j]=min(d[i][j],d[i][k]+d[k][j]);
}
int main(){
	cin>>w;
	while(w!=0){
		cin>>st>>p;
		s.clear();
		c=0;
		l[++c]=0,l[++c]=w;
		for(int i=1;i<=p;i++)cin>>x[i]>>y[i],s.insert(x[i]),l[++c]=x[i],l[++c]=y[i];
		sort(l+1,l+c+1);
		c=unique(l+1,l+c+1)-l-1;
		memset(d,0x3f,sizeof(d));
		for(int i=1;i<=p;i++)d[q(x[i])][q(y[i])]=0;
		for(int i=1;i<c;i++){
			for(int j=i+1;j<=c;j++)d[i][j]=min(d[i][j],ds(l[i],l[j]));
		}
		f();
		cout<<d[1][c]<<endl;
		cin>>w;
	}
	return 0;
}
90分,wa在10号点上
2025/2/8 13:40
加载中...