Cod sursa(job #863482)

Utilizator Kira96Denis Mita Kira96 Data 23 ianuarie 2013 20:51:25
Problema Castel Scor 0
Compilator cpp Status done
Runda Arhiva de probleme Marime 1 kb
#include<fstream>
using namespace std;
ifstream f("castel.in");
ofstream g("castel.out");
int dx[]={0,0,-1,0,1};
int dy[]={0,-1,0,1,0};
int m[151][151],i,j,tot,xi,yi,n,k,u,T,p,nr,xc,yc,key[30000],qx[30000],qy[30000],x[30000],y[30000],sol,sol1,M; 
bool mat[151][151],check[151][151];
int main ()
{
	f>>n>>M>>k;
	while(k>M)
	{
		xi++;
		k-=M;
	}
	++xi;
	qx[1]=xi;
	
	key[k]=1;
	yi=k;
	qy[1]=yi;
	for(i=1;i<=n;++i)
		for(j=1;j<=M;++j)
			f>>m[i][j];
	sol=1;
	nr=1;
		for(k=1;k<=nr;++k)
		{
			x[1]=qx[k];
			y[1]=qy[k];
			p=u=1;
			while(p<=u)
			{
				T=0;
				for(i=1;i<=4;++i)
				{
					xc=x[p]+dx[i];
					yc=y[p]+dy[i];
					if(xc>0&&yc>0&&xc<=n&&yc<=M&&key[m[xc][yc]]&&!mat[xc][yc])
					{
						T=1;
						++sol;
						mat[xc][yc]=1;
						key[(xc-1)*M+yc]=1;
						x[++u]=xc;
						y[u]=yc;
					}
				}
				if(!T&&!check[x[p]][y[p]])
				{
					check[x[p]][y[p]]=1;
					qx[++nr]=x[p];
					qy[++nr]=y[p];
				}
				++p;
			}
		}
	g<<sol;
	return 0;
}