警钟敲碎 关于cdq wa80
查看原帖
警钟敲碎 关于cdq wa80
868672
undefina楼主2024/7/21 11:40

可能是被卡精度了,典型情况是一个点和标准答案只差了一点儿,另一个点差了好几千。

维护凸包时(或者其他求斜率的时候)要注意两个点x坐标相同的情况

换long double,设eps,以及在浮点数比较的时候也要加上eps 虽然我也不知道为什么这样就能卡过去,教我

比如这样的

for(int i=l;i<=mid;++i){
		while(L<R && getk(que[R],que[R-1])<getk(que[R-1],i)) R--;
		que[++R]=i;
	}
for(int i=mid+1;i<=r;++i){
		while(L<R && getk(que[L],que[L+1])>-a[i].a/a[i].b) L++;
		gmax(dp[a[i].id],a[que[L]].x*a[i].a+a[que[L]].y*a[i].b);
	}

↓↓↓

for(int i=l;i<=mid;++i){
		while(L<R && getk(que[R],que[R-1])-eps<getk(que[R-1],i)) R--;
		que[++R]=i;
	}
for(int i=mid+1;i<=r;++i){
		while(L<R && getk(que[L],que[L+1])>-a[i].a/a[i].b) L++;
		gmax(dp[a[i].id],a[que[L]].x*a[i].a+a[que[L]].y*a[i].b);
	}
2024/7/21 11:40
加载中...