Pagini recente » Cod sursa (job #112260) | Cod sursa (job #1857878) | Cod sursa (job #9999) | Cod sursa (job #3269315) | Cod sursa (job #923365)
Cod sursa(job #923365)
#include <fstream>
#include <iostream>
#include <string>
#include <queue>
#include <stack>
#include <vector>
#include <string.h>
#include <iomanip>
using namespace std;
const string file = "bool";
const string infile = file + ".in";
const string outfile = file + ".out";
int N;
bool Values[30];
string expr;
string trans;
string change;
int index = 0;
int len;
void citire()
{
ifstream fin(infile.c_str());
getline(fin, expr);
fin >> N;
fin >> change;
fin.close();
}
bool readE();
bool readF()
{
bool c = 0;
bool r;
while(index < len && trans[index] == '!')
{
index++;
c ^= 1;
}
if(trans[index] == '(')
{
index++;
r = readE();
index++;
}
else if(trans[index] == 1 || trans[index] == 0)
{
if(trans[index] == 1)
{
r = true;
}
else
{
r = false;
}
}
else
{
r = Values[trans[index] - 'A'];
index++;
}
if(c)
{
return !r;
}
return r;
}
bool readT()
{
bool f = readF();
while(index < len && trans[index] == '&')
{
index++;
f &= readF();
}
return f;
}
bool readE()
{
bool t = readT();
while(index < len && trans[index] == '|')
{
index++;
t |= readT();
}
return t;
}
void solve()
{
trans.reserve(expr.size());
unsigned int i = 0;
while( i < expr.size() )
{
if( expr[i] ==' ' )
{
i ++;
}
else if( expr[i] =='T' && expr[i + 1] == 'R')
{
trans.push_back('1');
i += 4;
}
else if(expr[i] =='F' && expr[i + 1] == 'A')
{
trans.push_back('0');
i += 5;
}
else if(expr[i] =='A' && expr[i + 1] == 'N')
{
trans.push_back('&');
i += 3;
}
else if(expr[i] =='O' && expr[i + 1] == 'R')
{
trans.push_back('|');
i += 2;
}
else if(expr[i] =='N' && expr[i + 1] == 'O')
{
trans.push_back('!');
i += 3;
}
else
{
trans.push_back(expr[i]);
i ++;
}
}
len = trans.size();
}
void afisare()
{
ofstream fout(outfile.c_str());
for(int i = 0; i < N; i++)
{
int c = change[i] - 'A';
Values[c] ^= 1;
index = 0;
fout << readE() ;
}
fout.close();
}
int main()
{
citire();
solve();
afisare();
}