标题是二传

最短路径

正反建图,正图使从 1 出发到每个点 min[w] 最小,反图使从 n 出发到每个点 max[w] 最大

枚举转移点 u

为什么用 dij ?

dij 可以求出 1 到此点经过的点的最小值

最大均值

给定正整数序列 ,求一个平均数最大的 \(A\),长度不小于 \(L\) 的(连续的)子段。

看看代码吧,就是不会

#include <bits/stdc++.h>
using namespace std;
const double eps=1e-5;
int n,L; 
double a[100005],b[100005];
bool check(double mid){
	double minn=9982443530;
	for(int i=1;i<=n;i++)b[i]=a[i]*1.0-mid;
//	for(int i=1;i<=n;i++) cout<<b[i]<<" ";
//		cout<<endl;
	for(int i=1;i<=n;i++)b[i]=b[i-1]+b[i];
	for(int i=L;i<=n;i++){
		minn=min(b[i-L],minn);
		if(b[i]-minn>=-eps)return 1;
	}
	return 0;
}
int main(){
	cin>>n>>L;
	for(int i=1;i<=n;i++){
		cin>>a[i];
	}
	double l=-1e6,r=1e6;
	while(l+eps<r){
		double mid=(l+r)/2.0;
		if(check(mid))l=mid;
		else r=mid;
	}
	cout<<int(r*1000);		 
	return 0;
}
posted @ 2024-09-09 15:26  小惰惰  阅读(2)  评论(0编辑  收藏  举报
/* 鼠标点击求赞文字特效 */