Pagini recente » Cod sursa (job #2669096) | Cod sursa (job #1440897) | Cod sursa (job #1440540) | Cod sursa (job #2352414) | Cod sursa (job #66469)
Cod sursa(job #66469)
//BMC
#include<fstream.h>
#include<string.h>
ifstream fin("bool.in");
ofstream fout("bool.out");
int prioritate(char c)
{
if(c=='n')return 3;
if(c==')'||c=='(')return 0;
if(c=='o')return 1;
if(c=='a')return 2;
}
int main()
{
int j,n,i,l,k,r,d[27];
char ex[1001],st[1001],fp[1000],v;
fin.getline(fp,1001);
n=strlen(ex);
l=0;
for(i=0;i<n;i++)
{
if( ( fp[i]>='A' && fp[i]<='Z' ) || ( fp[i]==')' || fp[i]=='(' ) ) ex[++l]=fp[i];
if( fp[i]=='A' && fp[i+1]=='N') { ex[l]='a'; i+=2; }
if( fp[i]=='O' && fp[i+1]=='R') { ex[l]='o'; i++; }
if( fp[i]=='N' && fp[i+1]=='O') { ex[l]='n'; i+=2; }
if( fp[i]=='T' && fp[i+1]=='R') { ex[l]='1'; i+=3; }
if( fp[i]=='F' && fp[i+1]=='A') { ex[l]='0'; i+=4; }
}
ex[0]='(';
ex[++l]=')';
n=k=0;
for(i=0;i<=l;i++)
{
if( ex[i]=='(' ) st[n++]='(';
if( ex[i]==')' ) { while( st[n-1]!='(' ) { fp[k++]=st[n-1]; n--; } k--; }
if( ex[i]=='a' || ex[i]=='o' || ex[i]=='n' )
{
if( prioritate(st[k-1])>=prioritate(ex[i]) )
{
while( prioritate(st[k-1])>=prioritate(ex[i]) )
{ fp[k++]=st[n-1]; n--; }
k--;
st[n++]=ex[i];
}
else st[k++]=ex[i];
}
if( ex[i]>='A' && ex[i]<='Z' ) fp[k++]=ex[i];
}
fp[k]=NULL;
fin>>n;
for(i=0;i<27;i++)d[i]=0;
for(i=1;i<=n;i++)
{
fin>>v;
d[v-'A']=!d[v-'A'];
l=r=0;
for(j=0;j<k;j++)
{
if( fp[i]>='A' && fp[i]<='Z' ) st[++k]=d[fp[i]-'A'];
else
if(fp[i]=='0')st[++k]=0;
else
if(fp[i]=='1')st[++k]=1;
else
{
if(fp[i]=='a') if( st[k]==1 && st[k-1]==1 ) st[--k]=1; else st[--k]=0;
if(fp[i]=='n') st[k]=!st[k];
if(fp[i]=='o') if( st[k]==0 && st[k-1]==0 ) st[--k]=0; else st[--k]=1;
}
}
fout<<st[0];
}
return 0;
}