Cod sursa(job #667640)

Utilizator SebiSebiPirtoaca George Sebastian SebiSebi Data 23 ianuarie 2012 16:00:58
Problema Castel Scor 10
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.24 kb
#include<iostream>
#include<fstream>
#include<bitset>
#include<vector>
using namespace std;
struct coada {
	unsigned short x,y;
};
coada c[25501];
vector <coada> cheier[25501];
unsigned short a[155][155];
bitset <155> d[155];
bitset <155> cc[155];
bitset <22501> v;
int main ()
{
	int n,m,k,st,dr,nr,j,i,cheien,cheienn,cg;
	coada aa,b;
	int dx[]={0,-1,0,1,0};
	int dy[]={0,0,1,0,-1};
	ifstream f("castel.in");
	ofstream g("castel.out");
	f>>n>>m>>k;
	for(i=1;i<=n;i++)
		for(j=1;j<=m;j++)
			f>>a[i][j];
	f.close();
	if(k%m==0) {
		c[1].x=k/m;
		c[1].y=m;
	}
	else {
		c[1].x=k/m+1;
		c[1].y=k%m;
	}
	st=1;
	dr=1;
	cc[k]=1;
	d[c[1].x][c[1].y]=1;
	cc[c[1].x][c[1].y]=1;
	v[a[c[1].x][c[1].y]]=1;
	nr=1;
	while(st<=dr) {
		aa=c[st];
		st++;
		cc[aa.x][aa.y]=0;
		cheien=(aa.x-1)*m+aa.y;
		v[cheien]=1;
		for(i=1;i<=4;i++) {
			b.x=aa.x+dx[i];
			b.y=aa.y+dy[i];
			if(a[b.x][b.y])	{
				cheienn=a[b.x][b.y];
				if((d[b.x][b.y]==0)&&(v[cheienn]==1)) {
					d[b.x][b.y]=1;
					cc[b.x][b.y]=1;
					dr++;
					c[dr]=b;
					nr++;
					cheien=(b.x-1)*m+b.y;
					v[cheien]=1;
				}
				else if((d[b.x][b.y]==0)&&(v[cheienn]==0)) 
					cheier[cheienn].push_back(b);
			}
		}
	}
	g<<nr;
	g.close();
	return 0;
}