Pagini recente » Cod sursa (job #1844038) | Cod sursa (job #2701246) | Cod sursa (job #1048827) | Cod sursa (job #1533468) | Cod sursa (job #1901714)
#include <bits/stdc++.h>
using namespace std;
ifstream in("bool.in");
ofstream out("bool.out");
const int NMAX = 1000;
string ops;
string mods, line, ans;
int pos;
bool val[30];
int N;
void change() {
for( int i = 0; i+1 < (int)line.size(); ++i ) {
if( line[i] == 'A' && line[i+1] == 'N' ) ops += '&', i += 2;
else if( line[i] == 'O' && line[i+1] == 'R' ) ops += '|', i += 1;
else if( line[i] == 'N' && line[i+1] == 'O' ) ops += '!', i += 2;
else if( line[i] == 'T' && line[i+1] == 'R' ) ops += '1', i += 3;
else if( line[i] == 'F' && line[i+1] == 'A' ) ops += '0', i += 4;
else if( std::isalpha(line[i]) || line[i] == '(' || line[i] == ')' ) ops += line[i];
}
}
bool SAU();
bool NOT() {
bool ans = 0;
if( ops[pos] == '(' ) {
++pos;
ans = SAU();
++pos;
}
else if( ops[pos] == '!' ) {
++pos;
ans = 1 - SAU();
}
else if( std::isalpha( ops[pos] ) ) {
ans = val[ ops[pos] - 'A' ];
++pos;
}
else ans = ops[pos] - '0';
return ans;
}
bool SI() {
bool ans = NOT();
while( pos < (int)ops.size() && ops[pos] == '&' ) {
++pos;
ans &= NOT();
}
return ans;
}
bool SAU() {
bool ans = SI();
while( pos < (int)ops.size() && ops[pos] == '|' ) {
++pos;
ans |= SI();
}
return ans;
}
int main()
{
getline( in, line, '\n' );
line += ' ';
change();
/// out << ops << '\n';
in >> N >> mods;
for( auto ch : mods ) {
val[ ch - 'A' ] ^= 1;
pos = 0;
ans.push_back( '0' + SAU() );
}
out << ans << '\n';
return 0;
}