天天发代码博客,似乎不太好,毕竟影响读者兴趣,呃,随便啦,反正这个的东东也没几个人会看的,就当是对自己的一种监督吧。

#include <stdio.h>

double Are(	double x1,double y1,
			double x2,double y2,
			double x3,double y3,
			double x4,double y4){//四点坐标叉乘求面积 模板素材
	return	(((x3-x1)*(y2-y1)-(x2-x1)*(y3-y1))
			-((x3-x1)*(y4-y1)-(x4-x1)*(y3-y1)))/2.0;
}
bool Intersection(double ax1, double ay1, double ax2, double ay2, double bx1, double by1, double bx2, double by2, double &ix, double &iy)
{//四点坐标,对应两天直线,求量直线交点坐标  模板素材
	double d=(ay2-ay1)*(bx2-bx1)-(by2-by1)*(ax2-ax1);
	if(d==0)return false; // 两直线平行就退出,避免除数为 0 的情况
	ix=((ax2-ax1)*(bx2-bx1)*(by1-ay1)+(ay2-ay1)*(bx2-bx1)*ax1-(by2-by1)*(ax2-ax1)*bx1)/d;
	iy=((ay2-ay1)*(by2-by1)*(bx1-ax1)+(ax2-ax1)*(by2-by1)*ay1-(bx2-bx1)*(ay2-ay1)*by1)/-d;
	return true;
}

int main(){
	double a[32],b[32],c[32],d[32];
	double x1[32],y1[32],x2[32],y2[32];
	double max,tmp;
	int n,i,j;
	while(scanf("%d",&n),n!=0){
		max=0.0;
		a[0]=0.0;
		a[n+1]=1.0;
		for(i=1;i<=n;i++){
			scanf("%lf",&a[i]);
		}
		b[0]=0.0;
		b[n+1]=1.0;
		for(i=1;i<=n;i++){
			scanf("%lf",&b[i]);
		}
		c[0]=0.0;
		c[n+1]=1.0;
		for(i=1;i<=n;i++){
			scanf("%lf",&c[i]);
		}
		d[0]=0.0;
		d[n+1]=1.0;
		for(i=1;i<=n;i++){
			scanf("%lf",&d[i]);
		}
		for(i=0;i<=n+1;i++){
			x2[i]=a[i];
			y2[i]=0.0;
		}
		for(i=1;i<=n+1;i++){
			for(j=0;j<=n+1;j++){
			//	printf("%lf %lf , ",x2[j],y2[j]);
				x1[j]=x2[j];
				y1[j]=y2[j];
				Intersection(a[j],0.0,b[j],1.0,0.0,c[i],1.0,d[i],x2[j],y2[j]);
			}
		//	printf("n");
			for(j=1;j<=n+1;j++){
				tmp=Are(x1[j-1],y1[j-1],x1[j],y1[j],x2[j],y2[j],x2[j-1],y2[j-1]);
				if(tmp<0)tmp=-tmp;
			//	printf("%lf  ",tmp);
				if(tmp>max)max=tmp;
			}
		//	printf("n");
		}
		printf("%lfn",max);
	}
	return 0;
}

这个题目就是求一个栅格里面面积最大的那个格子的面积。求量两直线交点坐标,然后用叉乘求面积就行了。叉乘还是自己写的,直线交点坐标这个就套了模板,处理调试细心一些以为,水题,鉴定完毕。

ps:刚刚去看,学院的服务器down了,那个红烛的网站,暂时无法访问,怎么一个囧字了得!