Pagini recente » Cod sursa (job #2785404) | Cod sursa (job #2300604) | Cod sursa (job #3031383) | Cod sursa (job #2613495) | Cod sursa (job #25399)
Cod sursa(job #25399)
#define _CRT_SECURE_NO_DEPRECATE
#include <cstdio>
#include <cstring>
const int MAX_N = 1025;
int N, M, Nm, NM;
bool spctm[MAX_N], spctM[MAX_N], one[MAX_N], two[MAX_N];
int pl1[MAX_N], pl2[MAX_N];
int main(void) {
FILE *in = fopen("balanta.in", "r");
fscanf(in, "%d %d", &N, &M);
Nm = NM = N;
int i, j, len, res;
for (i = 1; i <= N; ++ i) {
spctm[i] = spctM[i] = true;
}
for (i = 0; i < M; ++ i) {
memset(one, 0, sizeof(one));
memset(two, 0, sizeof(two));
fscanf(in, "%d", &len);
for (j = 0; j < len; ++ j) {
fscanf(in, "%d", &pl1[j]);
one[pl1[j]] = true;
}
for (j = 0; j < len; ++ j) {
fscanf(in, "%d", &pl2[j]);
two[pl2[j]] = true;
}
fscanf(in, "%d", &res);
if (res == 0) { // pe nici unul din talere nu exista moneda falsa
for (j = 0; j < len; ++ j) {
if (spctM[pl1[j]] == true) {
NM --;
}
spctM[pl1[j]] = false;
if (spctM[pl2[j]] == true) {
NM --;
}
spctM[pl2[j]] = false;
if (spctm[pl1[j]] == true) {
Nm --;
}
spctm[pl1[j]] = false;
if (spctm[pl2[j]] == true) {
Nm --;
}
spctm[pl2[j]] = false;
}
continue;
}
if (res == 1) { // primul taler e mai greu
for (j = 0; j < len; ++ j) {
// moneda falsa e mai grea => moneda falsa e pe primul taler
if (spctM[pl2[j]] == true) {
NM --;
}
spctM[pl2[j]] = false;
// moneda falsa e mai usoara => moneda falsa e pe al 2-lea taler
if (spctm[pl1[j]] == true) {
Nm --;
}
spctm[pl1[j]] = false;
}
for (j = 1; j <= N; ++ j) {
// daca o moneda e suspecta, dar nu e pe talerul mai greu, e normala
if (spctM[j] == true && one[j] == false) {
spctM[j] = false;
NM --;
}
// o moneda e suspecta dar nu apare pe talerul mai usor
if (spctm[j] == true && two[j] == false) {
spctm[j] = false;
Nm --;
}
}
continue;
}
if (res == 2) { // al doilea taler e mai greu
for (j = 0; j < len; ++ j) {
// moneda falsa e mai grea => moneda falsa e pe al 2-lea taler
if (spctM[pl1[j]] == true) {
NM --;
}
spctM[pl1[j]] = false;
// moneda falsa e mai usoara => moneda falsa e pe primul taler
if (spctm[pl2[j]] == true) {
Nm --;
}
spctm[pl2[j]] = false;
}
for (j = 1; j <= N; ++ j) {
// daca o moneda e suspecta, dar nu e pe talerul mai greu, e normala
if (spctM[j] == true && two[j] == false) {
spctM[j] = false;
NM --;
}
// daca o moneda e suspecta, dar nu e pe talerul mai greu, e normala
if (spctm[j] == true && one[j] == false) {
spctm[j] = false;
Nm --;
}
}
}
}
fclose(in);
FILE *out = fopen("balanta.out", "w");
if (Nm == 0 && NM == 0) {
fprintf(out, "0\n");
fclose(out);
return 0;
}
if (NM == 1 && Nm == 1) {
for (i = 1; i <= N; ++ i) {
if (spctm[i] == true && spctM[i] == true) {
fprintf(out, "%d\n", i);
fclose(out);
return 0;
}
}
fprintf(out, "0\n");
fclose(out);
return 0;
}
if (Nm == 1) {
for (i = 1; i <= N; ++ i) {
if (spctm[i] == true) {
fprintf(out, "%d\n", i);
fclose(out);
return 0;
}
}
}
if (NM == 1) {
for (i = 1; i <= N; ++ i) {
if (spctM[i] == true) {
fprintf(out, "%d\n", i);
fclose(out);
return 0;
}
}
}
fprintf(out, "0\n");
fclose(out);
return 0;
}