Cod sursa(job #1482313)

Utilizator StarGold2Emanuel Nrx StarGold2 Data 6 septembrie 2015 20:49:51
Problema Castel Scor 30
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.17 kb
#include <cstdio>
#define DIM 160
using namespace std;

int A[DIM][DIM], V[DIM][DIM] , nr, st, N, is, K;
int C[DIM*DIM][5], W[DIM*DIM], ok, dr, M, js;

int Di[5] = {0,-1, 0, 1, 0};
int Dj[5] = {0, 0, 1, 0,-1};

int main(){

	freopen("castel.in" ,"r", stdin );
	freopen("castel.out","w", stdout);

	scanf("%d %d %d", &N, &M, &K);

	for(int i = 1; i <= N; i ++)
		for(int j = 1; j <= M; j ++)
			scanf("%d", &A[i][j]);
			
	is = K / M + 1;
	js = K % M;
	
	if(K % M == 0){
		is --;
		js = M;
	}

	st = 1, dr = 1, ok = 1, nr = 1;
	C[1][1] = is;
	C[1][2] = js;
	W[K] = 1;
	V[is][js] = 1;

	while(ok){

		ok = 0; int dr2 = dr;

		for(int i = st; i <= dr2; i ++){
			int ic = C[i][1];
			int jc = C[i][2];

			for(int d = 1; d <= 4; d ++){
				int iv = ic + Di[d];
				int jv = jc + Dj[d];

				if(iv >= 1 && iv <= N)
					if(jv >= 1 && jv <= M)
						if(V[iv][jv] == 0)
							if(W[A[iv][jv]] == 1){
								dr ++;
								C[dr][1] = iv;
								C[dr][2] = jv;
								V[iv][jv] = 1;
								W[M*(iv-1)+jv] = 1;
								ok = 1; nr ++;
							}
			}
		}
	}

	printf("%d", dr);

	/*for(int i = 1; i <= dr; i ++)
		printf("%d %d\n", C[i][1], C[i][2]);*/

	fclose(stdin );
	fclose(stdout);

	return 0;
}