Pagini recente » Cod sursa (job #564334) | Cod sursa (job #1699860) | Cod sursa (job #733902) | Cod sursa (job #174201) | Cod sursa (job #26753)
Cod sursa(job #26753)
#include <cstdio>
#include <bitset>
using namespace std;
#define MAXN 1024
int N, M;
bitset<MAXN> high, low, m1, m2;
int main()
{
freopen("balanta.in", "rt", stdin);
freopen("balanta.out", "wt", stdout);
scanf("%d %d", &N, &M);
for (int i = 0; i < N; i++)
high[i] = 1, low[i] = 1;
for (; M; M--)
{
int Nm; m1.reset(); m2.reset();
scanf("%d", &Nm);
for (int i = 0; i < Nm; i++)
{
int k;
scanf("%d", &k); m1[k - 1] = 1;
}
for (int i = 0; i < Nm; i++)
{
int k;
scanf("%d", &k); m2[k - 1] = 1;
}
int type;
scanf("%d", &type);
if (type == 0) //monezile din ambele multimi nu sunt false
high &= ~m1 & ~m2,
low &= ~m1 & ~m2;
if (type == 1) //monezile din prima multime au potentialul de a fi moneda falsa mai grea
//in timp ce celelalte au potentialul de a fi moneda falsa mai usoara
high &= m2,
low &= m1;
if (type == 2) //caz simetric celui de mai sus
high &= m1,
low &= m2;
}
if (high.count() == 1 && low.none())
{
int rez;
for (rez = 0; !high[rez]; rez++);
printf("%d\n", rez + 1);
return 0;
}
if (low.count() == 1 && high.none())
{
int rez;
for (rez = 0; !low[rez]; rez++);
printf("%d\n", rez + 1);
return 0;
}
printf("0\n");
return 0;
}