Cod sursa(job #616790)
Utilizator | Data | 13 octombrie 2011 13:29:02 | |
---|---|---|---|
Problema | Balanta | Scor | 80 |
Compilator | cpp | Status | done |
Runda | Arhiva de probleme | Marime | 3.79 kb |
#include <cstdio>
#define MAXN 1024
int c[MAXN];
int b[MAXN];
int n, m;
/*
c[i] = 0 daca nu se stie nimic despre moneda i
c[i] = 1 daca moneda i a facut parte dintr-un grup 'mai greu'
c[i] = -1 daca moneda i a facut parte dintr-un grup 'mai usor'
c[i] = 2 daca moneda i sigur nu e cea cautata
*/
int main()
{
int i, j, g = 0, u = 0, s = 0, nr, r;
freopen("balanta.in", "r", stdin);
freopen("balanta.out", "w", stdout);
scanf("%d %d", &n, &m);
for(i=0;i<m;++i)
{
scanf("%d", &nr);
for(j=0;j<2*nr;++j)
{
scanf("%d", &b[j]);
}
scanf("%d", &r);
switch(r)
{
case 0:
for(j=0;j<nr;++j)
{
c[b[j]] = 2;
}
for(j=nr;j<2*nr;++j)
{
c[b[j]] = 2;
}
break;
case 1:
for(j=0;j<nr;++j)
{
if(c[b[j]] == -1 || c[b[j]] == 2)
c[b[j]] = 2;
else
c[b[j]] = 1;
}
for(j=nr;j<2*nr;++j)
{
if(c[b[j]] == 1 || c[b[j]] == 2)
c[b[j]] = 2;
else
c[b[j]] = -1;
}
break;
case 2:
for(j=0;j<nr;++j)
{
if(c[b[j]] == 1 || c[b[j]] == 2)
c[b[j]] = 2;
else
c[b[j]] = -1;
}
for(j=nr;j<2*nr;++j)
{
if(c[b[j]] == -1 || c[b[j]] == 2)
c[b[j]] = 2;
else
c[b[j]] = 1;
}
break;
}
u = g = s = 0;
for(j=0;j<2*nr;++j)
{
switch(c[b[j]])
{
case -1:
++u; //usoare
break;
case 1:
++g; //grele
break;
case 2:
++s;
break;
}
}
if(u == 1 && g != 1)
{
for(j=0;j<2*nr;++j)
{
if(c[b[j]] == -1)
{
printf("%d\n", b[j]);
return 0;
}
}
}
if(g == 1 && u != 1)
{
for(j=0;j<2*nr;++j)
{
if(c[b[j]] == 1)
{
printf("%d\n", b[j]);
return 0;
}
}
}
}
s = g = u = 0;
for(i=1;i<=n;++i)
{
switch(c[i])
{
case -1:
++u;
break;
case 1:
++g;
break;
case 2:
++s;
break;
}
}
if(s == n-1)
{
for(i=1;i<=n;++i)
{
if(c[i] != 2)
{
printf("%d\n", i);
return 0;
}
}
}
if(u == 1 && g != 1)
{
for(i=1;i<=n;++i)
{
if(c[i] == -1)
{
printf("%d\n", i);
return 0;
}
}
}
if(g == 1 && u != 1)
{
for(i=1;i<=n;++i)
{
if(c[i] == 1)
{
printf("%d\n", i);
return 0;
}
}
}
printf("0\n");
return 0;
}