Pagini recente » Cod sursa (job #2312914) | Cod sursa (job #1282122) | Cod sursa (job #2428845) | Cod sursa (job #363740) | Cod sursa (job #1248724)
#include <fstream>
#include <string>
using namespace std;
ifstream fin("bool.in");
ofstream fout("bool.out");
const int sigma= 26;
int val[sigma+1], n, it;
int solve();
string s, modif;
int termen( ) {
int res= 0;
if ( s[it]=='(' ) {
++it; res= solve(), ++it;
} else if ( s[it]=='N' && s[it+1]=='O' ) {
while ( s[it]>='A' && s[it]<='Z' ) ++it; ++it;
res= 1-termen();
} else if ( s[it]=='T' && s[it+1]=='R' ) {
while ( s[it]>='A' && s[it]<='Z' ) ++it; ++it;
res= 1;
} else if ( s[it]=='F' && s[it+1]=='A' ) {
while ( s[it]>='A' && s[it]<='Z' ) ++it; ++it;
res= 0;
} else {
res= val[s[it]-'A'];
while ( s[it]>='A' && s[it]<='Z' ) ++it; ++it;
}
return res;
}
int factor( ) {
int res= termen();
while ( s[it]=='A' && s[it+1]=='N' ) {
while ( s[it]>='A' && s[it]<='Z' ) ++it; ++it;
res= res&termen();
}
return res;
}
int solve( ) {
int res= factor();
while ( s[it]=='O' && s[it+1]=='R' ) {
while ( s[it]>='A' && s[it]<='Z' ) ++it; ++it;
res= res|factor();
}
return res;
}
int main( ) {
getline( fin, s );
fin>>n>>modif;
for ( int i= 0; i<=sigma; ++i ) val[i]= 0;
for ( int i= 0; i<=n-1; ++i ) {
val[modif[i]-'A']= 1-val[modif[i]-'A'];
it= 0;
fout<<solve();
}
fout<<"\n";
return 0;
}