Pagini recente » Cod sursa (job #2797598) | Cod sursa (job #579096) | Cod sursa (job #1296032) | Cod sursa (job #561631) | Cod sursa (job #1856176)
#include <fstream>
using namespace std;
ifstream fi ("bool.in");
ofstream fo ("bool.out");
string s;
bool v[200];
int n,w,lg,i,j;
char chr;
bool litera(char c)
{
return ((c>='A' and c<='Z') or (c>='a' and c<='z'));
}
bool litmic(char c)
{
return (c>='a' and c<='z');
}
bool comanda(char c)
{
return (c>='A' and c<='Z');
}
bool rec(int pos)
{
int neg=0,k=0,p=0,el[1001],exp[1001];
for (i=pos;i<=lg;i++)
{
if (litmic(s[i])) {k++;el[k]=(neg+v[s[i]])%2;neg=0;}
if (comanda(s[i]))
{
if (s[i]=='N') {neg=(1+neg)%2;while (litera(s[i])) i++;i--;}
else if (s[i]=='T') {k++;el[k]=(1+neg)%2;while (litera(s[i])) i++;i--;neg=0;}
else if (s[i]=='F') {k++;el[k]=(0+neg)%2;while (litera(s[i])) i++;i--;neg=0;}
else if (s[i]=='A') {p++;exp[p]=1;while (litera(s[i])) i++;i--;}
else if (s[i]=='O') {p++;exp[p]=2;while (litera(s[i])) i++;i--;}
}
if (s[i]=='(') {k++;el[k]=(neg+rec(i+1))%2;neg=0;}
if (s[i]==')')
{
for (j=1;j<k;j++)
{
if (exp[j]==1) el[j+1]=(el[j]+el[j+1]==2);
else el[j+1]=(el[j]+el[j+1]>0);
// fo<<pos<<' '<<el[k]<<'\n';
}
i++;
return (el[k]>0);
}
}
if (k==1) return (neg+el[1])%2;
for (j=1;j<k;j++)
{
if (exp[j]==1) el[j+1]=(el[j]+el[j+1]==2);
else el[j+1]=(el[j]+el[j+1]>0);
}
return (el[k]>0);
}
int main()
{
getline(fi,s);
lg=s.size()-1;
for (w=1;w<lg;w++)
if (litera(s[w]) and !litera(s[w-1]) and !litera(s[w+1])) s[w]=s[w]-'A'+'a';
if (litera(s[0]) and !litera(s[1])) s[0]=s[0]-'A'+'a';
if (litera(s[lg]) and !litera(s[lg-1])) s[lg]=s[lg]-'A'+'a';
fi>>n;
for (w=1;w<=n;w++)
{
fi>>chr;
chr=chr-'A'+'a';
v[chr]=(1+v[chr])%2;
fo<<rec(0);
}
// fo<<'\n'<<s;
return 0;
}