萌新求助,连不到1kb的代码都调不出来!!!
查看原帖
萌新求助,连不到1kb的代码都调不出来!!!
173660
zhoukangyang楼主2020/7/11 06:41

28pts\tt 28 pts QAQ\rm QAQ

#include<bits/stdc++.h>
#define N 22000
using namespace std;
int n,head,tail,f[N];
long long Ans,maxn,X[N],d[N],Y[N];
double xl(long long xx,long long yy) {
	return (double)((Y[xx]-Y[yy])/(X[xx]-X[yy]));
}
int main() {
	scanf("%d",&n);
	for(int i = 1; i <= n; i++) scanf("%lld%lld",&d[i],&X[i]);
	for(int i = 1; i <= n/2; i++) swap(X[i],X[n+1-i]) , swap(d[i],d[n+1-i]);
	for(int i = 1; i <= n; i++) X[i] = X[i] + X[i-1] , Ans += X[i] * d[i];
	for(int i = 1; i <= n; i++) d[i] = d[i-1] + d[i] , Y[i] = X[i] * d[i-1];
	head = tail = 1 , f[1] = 1;
	for(int i = 2; i <= n; i++) {
		while(head < tail && xl(f[head],f[head+1]) <= d[i-1]) ++head;
		maxn = max(maxn,(d[n]-d[i-1]) * X[i] + (d[i-1] - d[f[head]-1]) * X[f[head]]);
		while(head < tail && xl(f[tail-1],f[tail]) <= xl(f[tail],i)) --tail;
		++tail , f[tail] = i;
	} 
	printf("%lld\n",Ans-maxn);
	return 0;
}
2020/7/11 06:41
加载中...