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 |
Re:TLE ,有谁帮我看看In Reply To:TLE ,有谁帮我看看 Posted by:bjtuacmer200710 at 2007-08-03 15:45:24 > #include <iostream> > using namespace std; > char a[202][202]; > bool sign[202][202]; > > int main(int argc, char* argv[]) > { > int n,m,i,j,k,num[202][202],x[202],y[202]; > bool a[202][202],sign[202][202]; > while(scanf("%d%d",&n,&m)&&n+m) > { > memset(sign,0,sizeof(sign)); > memset(a,'0',sizeof(a)); > memset(num,0,sizeof(num)); > k=0; > for(i=1;i<=n;i++) > { > getchar(); > for(j=1;j<=m;j++) > scanf("%c",&a[i][j]); > } > for(i=1;i<=n;i++) > for(j=1;j<=m;j++) > { > num[i][j]=(a[i-1][j]=='1')+(a[i][j-1]=='1')+(a[i+1][j]=='1')+(a[i][j+1]=='1'); > //四周1的个数 > if(a[i][j]=='1'&&num[i][j]<=1)//蛇的端点 > { > x[k]=i; > y[k++]=j; > } > } > int count=0;//MAX蛇的个数 > while(k--) > { > if(!sign[x[k]][y[k]]) > { > sign[x[k]][y[k]]=1;//是否访问 > i=x[k]; > j=y[k]; > while(1) > { > if(num[x[k]][y[k]]==0)//蛇长为1 > break; > if(a[i-1][j]=='1'&&!sign[i-1][j]) > i--; > else > { > if(a[i][j-1]=='1'&&!sign[i][j-1]) > j--; > else > { > if(a[i+1][j]=='1'&&!sign[i+1][j]) > i++; > else > if(a[i][j+1]=='1'&&!sign[i][j+1]) > j++; > } > } > sign[i][j]=1; > if(num[i][j]!=2) > break; > } > if(num[i][j]>2)//有分支,不是蛇 > { > sign[i][j]=0; > continue; > } > if(num[x[k]-1][y[k]]==1||num[x[k]][y[k]-1]==1|| > num[x[k]+1][y[k]]==1||num[x[k]][y[k]+1]==1) > continue; > if(num[i-1][j]==1||num[i][j-1]==1|| > num[i+1][j]==1||num[i][j+1]==1) > continue; > count++; > } > > } > printf("%d\n",count); > } > return 0; > } > 测数据 2 2 1 1 1 1 有误 应该是0 Followed by: Post your reply here: |
All Rights Reserved 2003-2013 Ying Fuchen,Xu Pengcheng,Xie Di
Any problem, Please Contact Administrator