Cod sursa(job #203459)

Utilizator Omega91Nicodei Eduard Omega91 Data 16 august 2008 17:00:31
Problema Aprindere Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.02 kb
#include <cstdio>
#include <vector>
#include <algorithm>

typedef struct camera {
	bool stare; //0=stins, 1=aprins
	int timp;
	std::vector<camera*> schimba;
};

camera *cam;
int N, Trasp;
void citire()
{
	
	int M, C, Tc, NRc, i, j, st, ind;
	FILE *f1;
	f1 = fopen("aprindere.in", "r");
	fscanf(f1, "%d %d\n", &N, &M);
	cam = new camera [N];
	for (i = 0; i != N; ++i) {
		fscanf(f1, "%d", &st);
		cam[i].stare = st;
	}
	for (i = 0; i != M; ++i) {
		fscanf(f1, "%d %d %d", &C, &Tc, &NRc);
		cam[C].timp = Tc;
		for (j = 0; j != NRc; ++j) {
			fscanf(f1, "%d", &ind);
			cam[C].schimba.push_back(&cam[ind]);
		}
	}
	fclose(f1);
}

void comuta(camera *x)
{
	x->stare = !x->stare;
}

void rezolvare()
{
	for (int i = 0; i != N; ++i) {
		if (!cam[i].stare) {
			Trasp += cam[i].timp;
			comuta(&cam[i]);
			std::for_each(cam[i].schimba.begin(), cam[i].schimba.end(), comuta);
		}
	}
}

void afisare()
{
	FILE *f;
	f = fopen("aprindere.out", "w");
	fprintf(f, "%d\n", Trasp);
	fclose(f);
}

int main()
{
	citire();
	rezolvare();
	afisare();
	return 0;
}