Cod sursa(job #667573)

Utilizator unsilviuContvechidontdeactivatepls unsilviu Data 23 ianuarie 2012 13:25:02
Problema Castel Scor 50
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.32 kb
#include <fstream>
#include <vector>
using namespace std;
int v[151][151],w[151][151],x,y,q,vz[23000],fst[152][152],k,lg,l;
int dx[4]={-1,0,1,0},dy[4]={0,1,0,-1};
vector <int> tailx,cpx;
vector <int> taily,cpy;
int main() {
	int m,n,i,j;
	ifstream f("castel.in");
	ofstream g("castel.out");
	f>>n>>m>>k;
	for (i=0; i<=n+1; i++)
		fst[i][0]=fst[i][m+1]=1;
	for (i=0; i<=m+1; i++)
		fst[0][i]=fst[n+1][i]=1;
	x=k/m+1;
	y=k%m;
	if (!(k%m))
		y=m;
	q=0;
	for (i=1; i<=n; i++)
		for (j=1; j<=m; j++) {
			q++;
			f>>v[i][j];
			w[i][j]=q;
		}
	vz[w[x][y]]=1;
	q=1;
	fst[x][y]=1;
	for (i=0; i<4; i++)
		if (!fst[x+dx[i]][y+dy[i]]) {
			tailx.push_back(x+dx[i]);
			taily.push_back(y+dy[i]);
			fst[x+dx[i]][y+dy[i]]=1;
			lg++;
		}
	k=1;
	while (k) {
		k=0;
		for (j=0; j<lg; j++)
			if (vz[v[tailx[j]][taily[j]]]) {
				k=1;
				q++;
//				fst[tailx[j]][taily[j]]=1;
				x=tailx[j];
				y=taily[j];
				vz[w[x][y]]=1;
				tailx.erase(tailx.begin()+j);
				taily.erase(taily.begin()+j);
				j--;
				lg--;
				for (i=0; i<4; i++)
					if (!fst[x+dx[i]][y+dy[i]]) {
						tailx.push_back(x+dx[i]);
						taily.push_back(y+dy[i]);
						fst[x+dx[i]][y+dy[i]]=1;
						lg++;
					}
			}
	}
	g<<q<<'\n';
	g.close();
	return 0;
}