Cod sursa(job #18691)

Utilizator plastikDan George Filimon plastik Data 18 februarie 2007 12:59:01
Problema Culori Scor 0
Compilator cpp Status done
Runda preONI 2007, Runda 2, Clasa a 10-a Marime 0.84 kb
#include <cstdio>

int N, paths = 0;
int C[512];

void Explore(int i, int c) {
	if (i == 2 * N - 1) { // am terminat culorile
		if (C[i - 1] == C[0]) { // am ajuns in camera de plecare
			paths ++;
		}
		return;
	}
	// vreau sa intru intr-o camera de culoare C[i]
	if (i >= N) { // nu mai pot merge mai adanc, fiindca nu as mai putea sa ma intorc
		Explore(i + 1, c - 1);
		return;
	}
	// pot merge mai adanc
	if (C[i] == C[i - 2]) { // daca camera in care vreau sa merg are aceeasi culoare ca camera din care am venit
		Explore(i + 1, c - 1); // merg inapoi
	} 
	Explore(i + 1, c + 1);
}

int main(void) {
	FILE *in = fopen("culori.in", "r");
	fscanf(in, "%d", &N);
	int i;
	for (i = 0; i < N; ++ i) {
		fscanf(in, "%d", &C[i]);
	}
	fclose(in);
	
	Explore(0, 0);
	
	FILE *out = fopen("culori.out", "w");
	fprintf(out, "%d\n", paths);
	fclose(out);
	 
	return 0;
}