Pagini recente » Cod sursa (job #2614675) | Cod sursa (job #1046200) | Cod sursa (job #2899214) | Cod sursa (job #149596) | Cod sursa (job #2952472)
#include <fstream>
#import <algorithm>
#import <vector>
#import <map>
#import <set>
#import <deque>
#import <queue>
#import <cassert>
//#import <cmath>
#import <cstring>
#import <cctype>
#import <cstdlib>
#import <stack>
using namespace std;
string s;
set<char>mp;
int code(char c)
{
if(c=='!')return 3;
if(c=='&')return 2;
if(c=='|')return 1;
return 0;
}
int efect(bool x,bool y,char c)
{
if(c=='&')return (x&y);
return (x|y);
}
int efect(bool x,char c)
{
return !x;
}
stack<bool>nr;
stack<char>op;
void calc()
{
char ch=op.top();
op.pop();
if(ch=='!')
{
auto a=nr.top();
nr.pop();
nr.push(efect(a,ch));
}
else
{
auto a=nr.top();nr.pop();
auto b=nr.top();nr.pop();
nr.push(efect(a,b,ch));
}
}
int eval(string s)
{
s='('+s+')';
int n=(int)s.size()-1;
for(int i=0;i<=n;i++)
{
if(isalpha(s[i]))nr.push(mp.count(s[i]));
else if(isdigit(s[i]))nr.push(s[i]-'0');
else if(s[i]=='(')op.push('(');
else if(s[i]==')')
{
while(op.top()!='(')
{
calc();
}
op.pop();
}
else
{
while(code(s[i])<=code(op.top()))calc();
op.push(s[i]);
}
}
return nr.top();
}
main()
{
ifstream cin("bool.in");
ofstream cout("bool.out");
string aux;
getline(cin,aux);
int n=(int)aux.size();
aux.push_back(' ');
for(int i=0;i<n;i++)
{
if(aux[i]=='A' && aux[i+1]=='N')
{
s.push_back('&');
i+=2;
}
else if(aux[i]=='O' && aux[i+1]=='R')
{
s.push_back('|');
i++;
}
else if(aux[i]=='N' && aux[i+1]=='O')
{
s.push_back('!');
i+=2;
}
else if(aux[i]=='T' && aux[i+1]=='R')
{
s.push_back('1');
i+=3;
}
else if(aux[i]=='F' && aux[i+1]=='A')
{
s.push_back('0');
i+=4;
}
else if(aux[i]!=' ')
{
s.push_back(aux[i]);
}
}
//cout<<s<<'\n';
cin>>n>>aux;
for(int i=0;i<n;i++)
{
if(mp.count(aux[i]))
{
mp.erase(aux[i]);
}
else
{
mp.insert(aux[i]);
}
cout<<eval(s);
//return 0;
}
}