| ||||||||||
| 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 | |||||||||
每个墙或者门的起点是不是一定是整数啊?帮帮忙,看看这个怎么老是WRONG ANSWER?#include <stdlib.h>
#include <stdio.h>
int
main()
{int i,j,x,y,xx,yy,d,t,m,n,a[200][200][4],went[200][200],p[4][2]={{0,1},{1,0},{0,-1},{-1,0}},h[40000],step,flag,k,minx,miny,maxx,maxy;
long result,sum;
float x1,y1;
scanf("%d%d",&m,&n);
while ((m!=-1)&&(n!=-1))
{memset(a,0,160000*sizeof(int));
minx=200;miny=200;maxx=0;maxy=0;
for (i=0;i<m;i++ )
{scanf("%d%d%d%d",&x,&y,&d,&t);
if ( x>maxx ) maxx=x;if ( x<minx ) minx=x;
if ( y>maxy ) maxy=y;if ( y<miny ) miny=y;
if (d==0)
for ( j=0;j<t;j++) {a[x][y][2]=1;a[x][y-1][0]=1;x++;}
else for ( j=0;j<t;j++ ) {a[x][y][3]=1;a[x-1][y][1]=1;y++;}
}
for ( i=0;i<n;i++ )
{scanf("%d%d%d",&x,&y,&d);
if ( d==0) {a[x][y][2]=2;a[x][y-1][0]=2;}
else {a[x][y][3]=2;a[x-1][y][1]=2;}
}
scanf("%f%f",&x1,&y1);
x=x1;y=y1;
step=0;h[step]=0;flag=0;k=0;sum=0;result=50000;
memset(went,0,40000*sizeof(int));
while (step>=0)
{
if ( k>3 ) {step--;k=h[step];went[x][y]=0;x=x-p[k][0];y=y-p[k][1];
if ( a[x][y][k]==2 ) sum--;
k++;
}
else {xx=x+p[k][0];yy=y+p[k][1];
if (((a[x][y][k]==0)||(a[x][y][k]==2)) && (went[xx][yy]==0))
{ went[x][y]=1;
if ( a[x][y][k]==2 ) sum++;
if (xx>=maxx||xx<minx||yy>=maxy||yy<miny) {flag=1;
if (sum<result) result=sum;
if ( a[x][y][k]==2 ) sum--;}
else {
x=xx;y=yy;h[step]=k;step++;k=-1;}
}
k++;
}
}
if ( flag==0 ) printf("%d\n",-1);
else printf("%d\n",result);
scanf("%d%d",&m,&n);
}
return 1;
}
Followed by:
Post your reply here: |
All Rights Reserved 2003-2013 Ying Fuchen,Xu Pengcheng,Xie Di
Any problem, Please Contact Administrator