Cod sursa(job #29308)

Utilizator bogdan59Bogdan bogdan59 Data 8 martie 2007 22:02:04
Problema Balanta Scor 10
Compilator c Status done
Runda Arhiva de probleme Marime 1.29 kb
#include <stdio.h>
#include <stdlib.h>
int m, n,verbose=0;
int v[1024];
void read();
int main(){
read();
int i, mem,nr;
FILE *f=fopen("balanta.out","w");
nr=mem=0;
if(verbose)printf("======\n");
for(i=1;i<=n;i++)if(v[i]>0){mem=i;
			nr++;
			}
if(nr>1)fprintf(f,"0\n");
else fprintf(f,"%d\n",v[mem]);
fclose(f);
return 0;
}

void read(){
int stanga[512],dreapta[512];
int k, tilt, i, j;
FILE *f=fopen("balanta.in","r");
fscanf(f,"%d %d", &n, &m);
//n e nr de monede
//m e numaru de cantariri
for(i=0;i<m;i++){
	//iau fiecare cantarire in parte
	fscanf(f,"%d",&k);
	if(verbose)printf("k=%d \t", k);
	for(j=0;j<k;j++){fscanf(f,"%d",&stanga[j]);
			if(verbose)printf("%d ",stanga[j]);}
	if(verbose)printf("  ||  ");
	for(j=0;j<k;j++){fscanf(f,"%d",&dreapta[j]);
			if(verbose)printf("%d ",dreapta[j]);}
	fscanf(f,"%d",&tilt);
	if(verbose)printf("\ttilt=%d\n",tilt);
	if(tilt){ //daca balanta nu e echilibrata
		if(tilt==1){
				for(j=0;j<k;j++)if(v[stanga[j]]!=-1)v[stanga[j]]=1;
				for(j=0;j<k;j++)v[dreapta[j]]=-1;
				}
		if(tilt==2){
				for(j=0;j<k;j++)if(v[dreapta[j]]!=-1)v[dreapta[j]]=1;
				for(j=0;j<k;j++)v[stanga[j]]=-1;
				}
		}
	else {//daca e echilibrata atunci nu mai "suspectez" monedele respective... EVER!
		for(j=0;j<k;j++)v[stanga[j]]=-1;
		for(j=0;j<k;j++)v[dreapta[j]]=-1;
	    }
	}
fclose(f);
}