Cod sursa(job #1830021)
Utilizator | Data | 15 decembrie 2016 23:24:35 | |
---|---|---|---|
Problema | Bool | Scor | 10 |
Compilator | cpp | Status | done |
Runda | Arhiva de probleme | Marime | 3.15 kb |
#include <iostream>
#include <fstream>
using namespace std;
ifstream fin("bool.in");
ofstream fout("bool.out");
const int Nmax=90+5;
int change;
bool o,semn=0;
string t,sc,s;
bool lit[Nmax];
int i,j=0;
bool eval();
bool isalpha(char x);
void rez();
bool termen();
bool isalpha(char x)
{
if(x>=64 && x<=90)return 1;
return 0;
}
void rez()
{
if(lit[sc[j]]==0)lit[sc[j]]=1;
else lit[sc[j]]=0;
i=0;
semn=0;
fout<<eval();
if(j<change-1)
{
++j;
rez();
}
}
bool eval()
{
bool r= termen();
while(s[i]=='2' or s[i]=='3')
{
if(s[i]=='2')
{
i+=3;
bool t=termen();
if(r ==1 or t==1)r=1;
else r=0;
}
else
{
i+=4;
bool t=termen();
if(r ==1 && t==1)r=1;
else r=0;
}
}
return r;
}
bool termen()
{
bool r;
if(s[i]=='2')
{
i+=4;
semn=1;
r=termen();
}
else
{
if(s[i]=='(')
{
++i;
r=eval();
i+=2;
}
else
{
if(s[i]=='1'){
if((lit[t[i]]==0 && semn==0) or (lit[t[i]]==1 && semn==1))r=0;
else
r=1;
i+=2;
semn=0;
}
else
{
if((i+4)<s.size() && s[i+4]=='2')
{
r=0;
i+=6;
}
else
{
i+=5;
r=1;
}
}
}
}
return r;
}
int main()
{
getline(fin,t);
fin>>change;
fin>>sc;
for(int i=0;i<t.size();++i)
{
if(t[i]=='O' && t[i+1]=='R')
{
s.push_back(50);s.push_back(50);
i+=1;
}
else
{
if(t[i]=='N' && t[i+1]=='O')
{
s.push_back(50);s.push_back(50);s.push_back(50);
i+=2;
}
else
{
if(t[i]=='T' && t[i+1]=='R')
{
s.push_back(50);s.push_back(50);s.push_back(50);s.push_back(50);
i+=3;
}
else
{
if(t[i]=='F' && t[i+1]=='A')
{
s.push_back(50);s.push_back(50);s.push_back(50);s.push_back(50);s.push_back(50);
i+=4;
}
else
{
if(t[i]=='A' && t[i+1]=='N')
{
s.push_back(51);s.push_back(51);s.push_back(51);
i+=2;
}
else
if(isalpha(t[i]))s.push_back(49);
else s.push_back(t[i]);
}
}
}
}
}
rez();
return 0;
}