Cod sursa(job #293384)

Utilizator irene_mFMI Irina Iancu irene_m Data 1 aprilie 2009 18:39:48
Problema Castel Scor 50
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.04 kb
#include <fstream.h>
#define MaxN 155
#define MaxC 22505

int a[MaxN][MaxN],b[MaxN][MaxN],x[MaxC],y[MaxC],c[MaxC],n,m,k,dx[5]={0,0,1,0,-1},dy[5]={0,1,0,-1,0},nr;

void cit()
{
	int i,j;
	ifstream fin("castel.in");
	fin>>n>>m>>k;
	for(i=1;i<=n;i++)
		for(j=1;j<=m;j++)
			fin>>a[i][j];
	fin.close();
}

void lee()
{
	int xi,yi,i,st=1,dr=1,xx,yy,cam;
	if(k<=m)
	{
		xx=1; yy=k;
	}
	else
	{
		if(k%m>0)
			yy=k%m;
		else
			yy=m;
		xx=(k-yy)/m+1;
	}
	x[st]=xx; y[st]=yy;
	c[k]=1; nr=1;
	b[xx][yy]=1;
	while(st<=dr)
	{
		for(i=1;i<=4;i++)
		{
			xi=x[st]+dx[i]; yi=y[st]+dy[i];
			cam=(xi-1)*m+yi;
			if(xi<=n && xi>=1 && yi<=m && yi>=1 && c[a[xi][yi]] && (!b[xi][yi] || b[xi][yi]==1))
			{
				dr++;
				x[dr]=xi;
				y[dr]=yi;
				if(b[xi][yi]==0)
					b[xi][yi]=1;
				else
					b[xi][yi]=-1;
				if(!c[cam])
				{
					nr++;
					c[cam]=1;
				}
			}
		}
		st++;
	}
}

void afis()
{
	ofstream fout("castel.out");
	fout<<nr;
	fout.close();
}

int main()
{
	cit();
	lee();
	afis();
	return 0;
}