Mai intai trebuie sa te autentifici.
Cod sursa(job #1571818)
Utilizator | Data | 18 ianuarie 2016 15:41:42 | |
---|---|---|---|
Problema | Bool | Scor | 20 |
Compilator | cpp | Status | done |
Runda | Arhiva de probleme | Marime | 1.77 kb |
#include <iostream>
#include <fstream>
#include <string>
using namespace std;
ifstream fi("bool.in");
ofstream fo("bool.out");
int expresie();
int termen();
int factor();
int bucata();
string s;
int p, vector[200];//tot vectorul o sa fie 0 initial ._.
string aux;
int main()
{
getline(fi, s);
aux.assign(1000, ' ');
int n, i, k = 0;
n = s.length();
for (i = 1; i <= 26; i++)
vector[i] = 1;
for (i = 0; i < n; i++)
{
if (s[i] == 'A' && s[i + 1] == 'N')
{
aux[k++] = '&';
i += 2;
}
else if (s[i] == 'O' && s[i + 1] == 'R')
{
aux[k++] = '|';
i++;
}
else if (s[i] == 'N' && s[i + 1] == 'O')
{
aux[k++] = '!';
i += 2;
}
else if (s[i] == 'T' && s[i+1] == 'R')
aux[k++] = '1';
else if (s[i] == 'F' && s[i+1] == 'A')
aux[k++] = '0';
else if (s[i] != ' ')
aux[k++] = s[i];
}
int numar;
fi >> numar;
for (i = 1; i <= numar; i++)
{
char b;
fi >> b;
if (vector[b - 'A'] == 0)
vector[b - 'A'] = 1;
else vector[b - 'A'] = 0;
fo << expresie();
p = 0;
}
return 0;
}
int expresie()
{
int s = termen();
int d;
while (aux[p] == '|')
{
p++;
if (s == 1)
s = 1;
else {
d = termen();
if (d == 1)
s = 1;
else s = 0;
}
}
return s;
}
int termen()
{
int q = factor();
int d;
while (aux[p] == '&')
{
p++;
if (q == 1)
{
d = factor();
if (d == 1)
q = 1;
else q = 0;
}
else q = 0;
}
return q;
}
int factor()
{
int q = bucata();
int d;
while (aux[p] == '!')
{
if (q == 1)
q = 0;
else q = 1;
}
return q;
}
int bucata()
{
char q;
int val;
if (aux[p] == '('){
p++;
val = expresie();
p++;
return val;
}
val = vector[aux[p] - 'A'];
return val;
}