数据有点水,貌似错误算法都能过,希望能提供 hack 数据加强
查看原帖
数据有点水,貌似错误算法都能过,希望能提供 hack 数据加强
450743
XOOR楼主2024/5/9 23:08
#include<bits/stdc++.h>
#define int long long
using namespace std;
const int N=5e4+10;

int n,nn,l,r;
int dp[N],q[N];
struct Node{
	int x,y;
	bool friend operator < (Node a,Node b){
		if(a.x==b.x) return a.y>b.y;
		return a.x>b.x;
	}
}a[N];

double slope(int u,int v){
	int dx=a[u+1].x-a[v+1].x;
	int dy=dp[u]-dp[v];
	return 1.0*dy/(1.0*dx);
}

signed main(){
	scanf("%lld",&n);
	for(int i=1;i<=n;i++) scanf("%lld%lld",&a[i].x,&a[i].y);
	sort(a+1,a+n+1);
	nn=0;
	for(int i=1;i<=n;i++) if(a[nn].y<a[i].y) a[++nn]=a[i];
	n=nn;
	for(int i=1;i<=n;i++){
		while(l<r && slope(q[l+1],q[l])>=-a[i].y) l++;
		dp[i]=dp[q[l]]+a[q[l]+1].x*a[i].y;
		while(l<r && slope(q[r],q[r-1])<=slope(i,q[r-1])) r--;
		q[++r]=i;
	} 
	printf("%lld",dp[n]);
	return 0;
}

此代码在插入节点 ii 时比较的是 sloper−1,rslope_{r-1,r} 和 sloper−1,islope_{r-1,i} ,100昏,本人太弱,有没有大佬提供 hack 数据

2024/5/9 23:08
加载中...