Cod sursa(job #80197)

Utilizator andrei.12Andrei Parvu andrei.12 Data 26 august 2007 20:44:50
Problema Castel Scor 0
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.96 kb
#include<stdio.h>
int n, k, m, q[23000], chei[23000], i, a[23000], p, x, xx, car[23000], sol, mm, lng[23000];
int (*gs)[23000] = new int[23000][23000];
int dx(int i){
	switch(i){
	case 0: return 1;
	case 1: return -1;
	case 2: return n;
	case 3: return -n;
	}
	return 0;
}
int main()
{
	freopen("castel.in","r",stdin);
	freopen("castel.out","w",stdout);
	scanf("%d%d%d", &mm, &n, &k);
	for (i=1; i<=mm*n; i++)
		scanf("%d", &a[i]);
	q[1] = k;
	car[k] = 1;
	sol = 1;
	p = 0;
	m = 1;
	while (p < m){
		p ++;
		x = q[p];
		for (i=0; i<4; i++){
			xx =x+dx(i);
			if (xx > 0 && xx <= n*mm){
				if (!car[xx]){
					if (chei[a[xx]]){
						sol ++;
						q[++m] = xx;
					}
					else
						gs[a[xx]][++lng[a[xx]]] = xx;
					car[xx] = 1;
				}
			}
		}
		if (!chei[x]){
			chei[x] = 1;
			sol += lng[x];
			for (i=1; i<=lng[x]; i++)
				q[++m] = gs[x][i];
		}
	}
	printf("%d\n", sol);
	fclose(stdin);
	fclose(stdout);
	return 0;
}