Cod sursa(job #657422)

Utilizator Adrian1997Radulescu Adrian Adrian1997 Data 6 ianuarie 2012 16:19:11
Problema Balanta Scor 10
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.16 kb
#include <fstream>
#include <string.h>
using namespace std;
ifstream f("balanta.in");
ofstream g("balanta.out");
int n,m,x[1024],igr,iu,k;
bool st[1024],dr[1024];
bool gr[1024],u[1024];
long long sgr=0,su;

int main(void){
	register int i,j,r;
	
	f>>n>>m;
	sgr=(n*(n+1))/2;
	su=(n*(n+1))/2;
	igr=iu=n;
	for(i=1;i<=m;i++){
		f>>k;
		memset(st,0,sizeof(st));
		memset(dr,0,sizeof(dr));
		for(j=1;j<=k;j++){
			f>>x[j];
			st[x[j]]=true;
		}
		for(j=1;j<=k;j++){
			f>>x[j+k];
			dr[x[j+k]]=true;
		}
		f>>r;
		if(!r){
			//echiribru;
			for(j=1;j<=2*k;j++){
				if(gr[x[j]]==false)
					gr[x[j]]=true,igr--,sgr-=j;
				if(u[x[j]]==false)
					u[x[j]]=true,iu--,su-=j;
			}
		}
		else if(r==1)
			//talerul st e mai greu
			for(j=1;j<=n;j++){
				if(!gr[j] && !st[j])
					gr[j]=true,igr--,sgr-=j;
				if(!u[j] && !dr[j])
					u[j]=true,iu--,su-=j;
			}
		else{
			//talerul dr mai greu
			for(j=1;j<=n;j++){
				if(!gr[j] && !dr[j])
					gr[j]=true,igr--,sgr-=j;
				if(!u[j] && !st[j])
					u[j]=true,iu--,su-=j;
			}
		}
	}
	
	if(igr+iu==1){
		if(igr==1)
			g<<sgr;
		else if(iu==1)
			g<<su;
	}
	else
		g<<"0";
	return 0;
}