Pagini recente » Cod sursa (job #1070188) | Cod sursa (job #2813687) | Cod sursa (job #2427796) | Cod sursa (job #2817107) | Cod sursa (job #26471)
Cod sursa(job #26471)
#include <stdio.h>
#include <stdlib.h>
#define infile "balanta.in"
#define outfile "balanta.out"
#define NMAX 1030
#define CANT_MAX 1030
#define EGAL (int)('0')
#define LEFT (int)('1')
#define RIGHT (int)('2')
struct oper {short int k; char rez; short int left[NMAX/2], right[NMAX/2];};
FILE *fin,*fout;
int n,m;
oper op[CANT_MAX];
bool mic[NMAX],mare[NMAX];
void citire()
{
int i,j;
fin=fopen(infile,"r");
fscanf(fin,"%d %d",&n,&m);
for(i=0;i<m;i++)
{
fscanf(fin,"%d ",&op[i].k);
for(j=0;j<op[i].k;j++)
fscanf(fin,"%d ",&op[i].left[j]);
for(j=0;j<op[i].k;j++)
fscanf(fin,"%d ",&op[i].right[j]);
fscanf(fin,"%c",&op[i].rez);
}
fclose(fin);
}
int verifica_mic(int x)
{
int i,j,gasit;
for(i=0;i<m;i++)
switch(op[i].rez)
{
case EGAL: for(j=0;j<op[i].k;j++)
if(op[i].left[j]==x)
return 0;
for(j=0;j<op[i].k;j++)
if(op[i].right[j]==x)
return 0;
break;
case LEFT: gasit=0;
for(j=0;(j<op[i].k)&&!gasit;j++)
if(op[i].right[j]==x)
gasit=1;
if(!gasit)
return 0;
break;
case RIGHT: gasit=0;
for(j=0;(j<op[i].k)&&!gasit;j++)
if(op[i].left[j]==x)
gasit=1;
if(!gasit)
return 0;
break;
}
return 1;
}
int verifica_mare(int x)
{
int i,j,gasit;
for(i=0;i<m;i++)
switch(op[i].rez)
{
case EGAL: for(j=0;j<op[i].k;j++)
if(op[i].left[j]==x)
return 0;
for(j=0;j<op[i].k;j++)
if(op[i].right[j]==x)
return 0;
break;
case LEFT: gasit=0;
for(j=0;(j<op[i].k)&&!gasit;j++)
if(op[i].left[j]==x)
gasit=1;
if(!gasit)
return 0;
break;
case RIGHT: gasit=0;
for(j=0;(j<op[i].k)&&!gasit;j++)
if(op[i].right[j]==x)
gasit=1;
if(!gasit)
return 0;
break;
}
return 1;
}
void first_strategy() // moneda falsa are greutate mai mica
{
int i;
for(i=1;i<=n;i++)
mic[i]=verifica_mic(i);
}
void second_strategy() // moneda falsa are greutate mai mare
{
int i;
for(i=1;i<=n;i++)
mare[i]=verifica_mare(i);
}
void solution(int x)
{
fout=fopen(outfile,"w");
fprintf(fout,"%d\n",x);
fclose(fout);
exit(0);
}
int main()
{
int i,count,poz;
citire();
first_strategy();
second_strategy();
for(i=1;i<=n;i++)
mic[i] = mic[i] || mare[i];
count=0;
for(i=1;i<=n;i++)
if(mic[i])
if(count)
solution(0);
else
{
count++;
poz=i;
}
if(count)
solution(poz);
else
solution(0);
return 0;
}