比赛 2008haoi模拟训练3 评测结果 AAAATTTTTT
题目名称 位图 最终得分 40
用户昵称 zqzas 运行时间 0.000 s
代码语言 C++ 内存使用 0.00 MiB
提交时间 2008-04-24 11:24:42
显示代码纯文本
#include <stdio.h>
#include <math.h>

#define maxn 190
#define inf 30000

int n,m,now,s[maxn][maxn],bit1_x[maxn*maxn],bit1_y[maxn*maxn];
FILE *f1,*f2;

void run(void)
{
	int k,i,j,p;
	for (k=0;k<now;k++)
		for (i=0;i<n;i++)
			for (j=0;j<m;j++)
			{
				if (s[i][j]==1 || s[i][j]==0)
					continue;
				p=(int)fabs((double)bit1_x[k]-i)+fabs((double)bit1_y[k]-j);
				if (s[i][j]>p)
					s[i][j]=p;
			}
}

void ini(void)
{
	int i,j;
	char c;
	fscanf(f1,"%d%d\n",&n,&m);
	for (i=0;i<n;i++)
	{
		for (j=0;j<m;j++)
		{
			fscanf(f1,"%c",&c);
			s[i][j]=c-48;
			if (s[i][j]==1)
			{
				s[i][j]=0;
				bit1_x[now]=i;
				bit1_y[now]=j;
				now++;
			}
			else
			{
				s[i][j]=inf;
			}
		}
		fscanf(f1,"\n");
	}
	for (i=0;i<now;i++)
	{
		if (s[bit1_x[i]-1][bit1_y[i]]!=0)
			s[bit1_x[i]-1][bit1_y[i]]=1;
		if (s[bit1_x[i]][bit1_y[i]-1]!=0)
			s[bit1_x[i]][bit1_y[i]-1]=1;
		if (s[bit1_x[i]+1][bit1_y[i]]!=0)
			s[bit1_x[i]+1][bit1_y[i]]=1;
		if (s[bit1_x[i]][bit1_y[i]+1]!=0)
			s[bit1_x[i]][bit1_y[i]+1]=1;
	}

}

int main(void)
{
	int i,j;
	f1=fopen("bit.in","r");
	f2=fopen("bit.out","w");
	ini();
	run();
	for (i=0;i<n;i++)
	{
		for (j=0;j<m-1;j++)
			fprintf(f2,"%d ",s[i][j]);
		fprintf(f2,"%d\n",s[i][m-1]);
	}
	fclose(f1);fclose(f2);
	return 0;
}