Pagini recente » Cod sursa (job #3289053) | Cod sursa (job #550455) | Cod sursa (job #2244410) | Cod sursa (job #2623556) | Cod sursa (job #372163)
Cod sursa(job #372163)
Utilizator |
Cezar Mocan CezarMocan |
Data |
9 decembrie 2009 00:20:16 |
Problema |
2SAT |
Scor |
Ascuns |
Compilator |
cpp |
Status |
done |
Runda |
|
Marime |
1.7 kb |
#include <stdio.h>
#include <stdlib.h>
#include <algorithm>
using namespace std;
#define FIN "2sat.in"
#define FOUT "2sat.out"
#define FOK "2sat.ok"
int n, m, val[100100];
pair <int, int> expr[100100];
int sol;
void result(char msg[], int p)
{
fprintf(stderr, msg);
printf("%d", p);
exit(0);
}
bool eval_term(pair <int, int> T) {
int x, y;
x = val[abs(T.first)];
y = val[abs(T.second)];
if (T.first < 0)
x ^= 1;
if (T.second < 0)
y ^= 1;
return (x | y);
}
int main(void)
{
int i, a, b;
FILE *f;
f = fopen(FIN, "r");
if (!f) result("Fisier de intrare lipsa!", 0);
if (fscanf(f, "%d %d", &n, &m) != 2)
result("Fisier de intrare corupt!", 0);
for (i = 1; i <= n; i++)
{
if (fscanf(f, "%d %d", &a, &b) != 2)
result("Fisier de intrare corupt!", 0);
if (a < -n || a > n || (b < -n || b > n))
result("Fisier de intrare corupt!", 0);
expr[i] = make_pair(a, b);
}
f = fopen(FOK, "r");
if (!f) result("Fisier ok lipsa!", 0);
if (fscanf(f, "%d", &sol) != 1)
result("Fisier ok corupt!", 0);
f = fopen(FOUT, "r");
if (fscanf(f, "%d", &val[1]) != 1)
result("Fisier de iesire incomplet!", 0);
if (sol == -1) {
if (val[1] == -1)
result("Corect", 5);
else
result("Gresit", 0);
}
for (i = 2; i <= n; i++) {
if (fscanf(f, "%d", &val[i]) != 1)
result("Fisier de iesire incomplet!", 0);
}
for (i = 1; i <= n; i++)
if (val[i] < 0 || val[i] > 1)
result("Gresit", 0);
int rez = 1;
for (i = 1; i <= m; i++)
rez |= eval_term(expr[i]);
if (rez == 1)
result("Corect", 5);
else
result("Gresit", 0);
return 0;
}