Online Judge | Problem Set | Authors | Online Contests | User | ||||||
---|---|---|---|---|---|---|---|---|---|---|
Web Board Home Page F.A.Qs Statistical Charts | Current Contest Past Contests Scheduled Contests Award Contest |
我随机了100组数据,你的程序有5组跟我的答案不同In Reply To:啊? 昨晚在自习室里想出来的点现在测又是对的了, 我把程序放在这里 dynamic帮忙看一下啊 我算法里的一个地方确实还没有证明 Posted by:rruucc at 2003-11-04 07:47:59 > #include<stdio.h> > #include<string.h> > #define MaxN 201 > > int m,n,r,c; > double mar[MaxN][MaxN]; > double map[MaxN]; > int x1,y1,x2,y2; > int xx1,yy1,xx2,yy2; > double tmp,max; > > int init() > { int i,j; > memset(mar,0,sizeof(mar)); > scanf("%d",&m); if (m==0) return 0; > scanf("%d %d %d",&n,&r,&c); > for (i=1; i<=m; i++) > for (j=1; j<=n; j++) > {scanf("%lf",&mar[i][j]); mar[i][j]+=mar[i-1][j];} > return 1; > } > > void save() > {max=tmp/(y2-y1+1); > xx1=x1; yy1=y1; xx2=x2; yy2=y2; > } > > void check() > {if (tmp/(y2-y1+1)>max) > save(); > else if (tmp/(y2-y1+1)==max) > {if (x1<xx1) > save(); > else if (x1==xx1&&y1<yy1) > save(); > else if (x1==xx1&&y1==yy1&&x2<xx2) > save(); > else if (x1==xx1&&y1==yy1&&x2==xx2&&y2<yy2) > save(); > } > } > > void minmap() > { int i; > for (map[0]=0,i=1; i<=n; i++) map[i]=map[i-1]+map[i]; > tmp=map[c]; y1=1; y2=c; check(); > for (i=c+1; i<=n; i++) > {if ((tmp+map[i]-map[i-1])/(y2-y1+1+1)>=(map[i]-map[i-c])/c) > {tmp=tmp+map[i]-map[i-1]; y2++;} > else > {tmp=(map[i]-map[i-c]); y2++; y1=y2-c+1;} > check(); > } > } > > void search() > { int i; > max=-1; xx1=-1; yy1=-1; xx2=-1; yy2=-1; > for (x1=1; x1<=m; x1++) > for (x2=x1+r-1; x2<=m; x2++) > {for (i=1; i<=n; i++) map[i]=(mar[x2][i]-mar[x1-1][i])/(x2-x1+1); > minmap(); > } > printf("%d %d %d %d\n",xx1,yy1,xx2,yy2); > } > > int main() > {while (init()) > search(); > printf("*\n"); > return 0; > } Followed by:
Post your reply here: |
All Rights Reserved 2003-2013 Ying Fuchen,Xu Pengcheng,Xie Di
Any problem, Please Contact Administrator