Pagini recente » Istoria paginii utilizator/mihnea.anghel | Cod sursa (job #127025) | Cod sursa (job #2389061) | Cod sursa (job #1782992) | Cod sursa (job #1076331)
#include<fstream>
#include<algorithm>
#include<cstring>
#include<vector>
#include<string>
#include<queue>
#define abs(x) ((x>0)?(x):(-(x)))
#define max(a,b) ((a)>(b)?(a):(b))
#define min(a,b) ((a)<(b)?(a):(b))
#define ll long long
using namespace std;
ifstream in("bool.in");
ofstream out("bool.out");
const int Nmax = 105;
const int Lmax = 1005;
char s[Lmax+5],chn[Nmax+5];
char S[Lmax+5];int len=-1;
int var[30];
int N,p;
int ind(char c){
return int(c)-'A'+1;
}
bool letter(char& c){
return ('A'<=c && c<='Z');
}
void better(){
while(p<strlen(s)){
if(s[p]=='(') S[++len]=s[p];
if(s[p]==')') S[++len]=s[p];
if(letter(s[p])){
string tmp="";
while(letter(s[p])) tmp+=s[p++];
p--;
if(tmp=="NOT") S[++len]='!';
if(tmp=="AND") S[++len]='&';
if(tmp=="OR") S[++len]='|';
if(tmp=="TRUE") S[++len]='1';
if(tmp=="FALSE") S[++len]='0';
if(tmp.size()==1) S[++len]=tmp[0];
}
p++;
}
}
int val();
int expror();
int exprand();
int val(){
if(S[p]=='0'){
p++;
return 0;
}
if(S[p]=='1'){
p++;
return 1;
}
if(letter(S[p])){
p++;
return var[ind(S[p-1])];
}
if(S[p]=='!'){
p++;
return (!val());
}
if(S[p]=='('){
p++;
int tmp=expror();
p++;
return tmp;
}
}
int exprand(){
int x=val();
while(S[p]=='&'){
p++;
x=x&val();
}
return x;
}
int expror(){
int x=exprand();
while(S[p]=='|'){
p++;
x=x|exprand();
}
return x;
}
int main(){
in.getline(s,Lmax);
in>>N;in.get();
in.getline(chn,Nmax);
better();
for(int i=1;i<=N;i++){
var[ind(chn[i-1])]=!var[ind(chn[i-1])];
p=0;
out<<expror();
}
return 0;
}