Pagini recente » Cod sursa (job #1147946) | Cod sursa (job #2009638) | Cod sursa (job #1661124) | Cod sursa (job #2742852) | Cod sursa (job #938431)
Cod sursa(job #938431)
#include <fstream>
#include <cstring>
#include <stack>
#define In "bool.in"
#define Out "bool.out"
using namespace std;
bool lit[2013];
stack<int>pa;
int n,na,a[2013],st[2013],vf;
char sir[2013],b[2013],c[2013];
ofstream g(Out);
inline void Codif()
{
int nc,i;
nc = 0;
for(i=0;sir[i];)
{
if(sir[i]==' ')
i++;
if(sir[i]=='T'&&sir[i+1]=='R')
{
c[++nc] = '1';
i+=4;
continue;
}
if(sir[i]=='F'&&sir[i+1]=='A')
{
c[++nc] ='0';
i+=5;
continue ;
}
if(sir[i]=='N'&&sir[i+1]=='O')
{
c[++nc] ='n';
i+=3;
continue ;
}
if(sir[i]=='A'&&sir[i+1]=='N')
{
c[++nc] ='a';
i+=3;
continue ;
}
if(sir[i]=='O'&&sir[i+1]=='R')
{
c[++nc] ='o';
i+=2;
continue ;
}
c[++nc] = sir[i];
i++;
}
}
inline void Citire()
{
ifstream f(In);
f.getline(sir,1004);
Codif();
f>>n;
f.get();
f.getline(b,1004);
f.close();
}
inline void Preproc()
{
int i;
na = 0;
for(i=1;c[i];i++)
{
if(c[i]=='(')
{
a[++na] = -1;
continue;
}
if(c[i]==')')
{
a[++na] = -2;
continue;
}
if(c[i]=='a')
{
a[++na] = -3;
continue;
}
if(c[i]=='o')
{
a[++na] = -4;
continue;
}
if(c[i]=='n')
{
i++;
a[++na] = not(lit[int(c[i])]);
continue;
}
if(c[i]=='0'||c[i]=='1')
{
a[++na] = c[i]-'0';
continue;
}
a[++na] = lit[int(c[i])];
}
}
inline bool Rez(int s,int dr)
{
int i,j;
/*g<<"(";
for(i=s;i<=dr;i++)
g<<st[i]<<" ";
g<<")\n";*/
for(i=s+1;i<=dr;i+=2)
{
if(st[i]==-3)
st[i-1] = ((st[i-1])&(st[i+1]));
else
if(st[i]==-4)
st[i-1] = ((st[i-1])|(st[i+1]));
dr-=2;
for(j=i;j<=dr;j++)
st[j] = st[j+2];
i-=2;
}
return st[s];
}
inline void Afis()
{
int i;
for(i=1;i<=vf;i++)
g<<st[i]<<" ";
g<<"\n";
}
inline bool Eval()
{
int i;
vf = 0;
for(i=1;i<=na;i++)
{
if(a[i]==-1)
{
pa.push(vf+1);
continue;
}
if(a[i]==-2)
{
st[pa.top()] = Rez(pa.top(),vf);
vf = pa.top();
pa.pop();
continue;
}
st[++vf] = a[i];
}
return Rez(1,vf);
}
int main()
{
Citire();
int i;
for(i=0;b[i];i++)
{
lit[int(b[i])] = !(lit[int(b[i])]);
Preproc();
// g<<Eval();
}
g<<"\n";
g.close();
return 0;
}