Cod sursa(job #81410)

Utilizator vanila_CPPIonescu Victor Cristian vanila_CPP Data 1 septembrie 2007 23:13:17
Problema Aprindere Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.09 kb
#include <cstdio>
#include <cstdlib>
int* v;
int n,m;


class intrerupator
{
private:
	int nrc,time,*c;
public:
	void RoomTime(int x,int y)
	{
		nrc=x;
		time=y;
	}
	void initRooms()
	{
		c=(int *)malloc((nrc+1)*sizeof(int));
		for (int i=1;i<=nrc;i++)
		{
			scanf("%d",&c[i]);
			c[i]++;
		}
	}
	void Trigger()
	{
		for (int i=1;i<=nrc;i++)
		{
			v[c[i]]=1-v[c[i]];
		}
	}
	void increase(int &x)
	{
		x+=time;
	}
} * a;
void van(void)
{
	int c,nrc,t,i;
	freopen("aprindere.in","rt",stdin);
	freopen("aprindere.out","wt",stdout);
	scanf("%d%d",&n,&m);
	v=(int *)malloc((n+1)*sizeof(int));
	a=(intrerupator *)malloc((n+1)*sizeof(intrerupator));
	for (i=1;i<=n;i++)
	{
		scanf("%d",&v[i]);
	}
	for (i=1;i<=m;i++)
	{
		scanf("%d%d%d",&c,&t,&nrc);
		c++;
		a[c].RoomTime(nrc,t);
		a[c].initRooms();
	}
	fclose(stdin);
}


void ila(void)
{
	int timp=0;
	for (int i=1;i<=n;i++)
	{
		if (v[i]!=1)
		{
			a[i].Trigger();
			a[i].increase(timp);
		}
	}
	printf("%d\n",timp);
	fclose(stdout);
}




int main(void)
{
	van();ila();
	return 0;
}