能量守恒解决这个问题的,想起高中物理老师来了,粟米粟老师,嗯嗯,还有谢老师,很幸福咯~~

找对高点,高度差计算得出一个最小能量。(mgh)

对于每个嫉妒的土豆,计算盖点的坐标,得到高度差(mgh),再加上对应速度的动能(0.5mv^2),维护最小能量。

1Y水过。

#include<cstdio>
#include<cmath>
const double g=20;
int N,M,w,pk[1005][2];
double minp;

int main(){
	int i,j,ts,cs,x,v,maxh;
	double k,dx,y,p;
	scanf("%d",&ts);
	for(cs=1;cs<=ts;cs++){
		scanf("%d%d%d",&N,&M,&w);
		maxh=0;
		for(i=0;i<N;i++){
			scanf("%d%d",&pk[i][0],&pk[i][1]);
			if(pk[i][1]>maxh)maxh=pk[i][1];
		}
		minp=(maxh-pk[0][1])*g*w;
		for(i=0;i<M;i++){
			scanf("%d%d%*d",&x,&v);
			for(j=0;j<N;j++)
				if(pk[j][0]>=x)break;
			k=double(pk[j][1]-pk[j-1][1])/(pk[j][0]-pk[j-1][0]);
			dx=x-pk[j-1][0];
			y=k*dx+pk[j-1][1];
		//	printf("ny = %f , x=%d , k=%f , dx=%fn",y,x,k,dx);
			p=w*g*(y-pk[0][1])+0.5*w*v*v;
			if(minp<p)minp=p;
		}
		printf("Case %d: %.2fn",cs,sqrt(2*minp/w));
	}
	return 0;
}