Pagini recente » Cod sursa (job #1049170) | Statistici Todoran Marius (burim21) | Cod sursa (job #795876) | Cod sursa (job #1556789) | Cod sursa (job #594498)
Cod sursa(job #594498)
// -1 ( -2 & -3 OR -4 NOT
#include <fstream>
#include <string.h>
using namespace std;
char s[1001],s2[101],c;
int n,i,polo[1001],st[1001],l1,v[30],j;
int main(void)
{
FILE *f=fopen("bool.in","r");
FILE *o=fopen("bool.out","w");
fgets(s,1001,f);
fscanf(f,"%d",&n);
fscanf(f,"%c",&c);
fgets(s2,101,f);
v[29]=0;
v[28]=1;
l1=strlen(s);
for (i=0;i<l1;i++)
{
if (s[i]=='N' && s[i+1]=='O') { st[++st[0]]=-4; i+=2; continue;}
if (s[i]=='A' && s[i+1]=='N') { while (st[st[0]]==-4) {polo[++polo[0]]=st[st[0]]; st[0]--;}st[++st[0]]=-2; i+=2; continue;}
if (s[i]=='O' && s[i+1]=='R') {while (st[st[0]]==-2 || st[st[0]]==-4) {polo[++polo[0]]=st[st[0]]; st[0]--;} i++; st[++st[0]]=-3; continue;}
if (s[i]=='T' && s[i+1]=='R') {polo[++polo[0]]=28; i+=3; continue;}
if (s[i]=='F' && s[i+1]=='A') {polo[++polo[0]]=29; i+=4; continue;}
if (s[i]>='A' && s[i]<='Z') {polo[++polo[0]]=s[i]-'A'; continue;}
if (s[i]=='(') st[++st[0]]=-1;
if (s[i]==')') {while (st[st[0]]!=-1) {polo[++polo[0]]=st[st[0]]; st[0]--;} st[0]--;}
}
while (st[0]) {polo[++polo[0]]=st[st[0]]; st[0]--;}
for (j=0;j<n;j++)
{
v[s2[j]-'A']=1-v[s2[j]-'A'];
for (i=1;i<=polo[0];i++)
{
if (polo[i]>=0) st[++st[0]]=v[polo[i]];
if (polo[i]==-4) {st[st[0]]=1-st[st[0]];}
if (polo[i]==-2) {if (st[st[0]-1] && st[st[0]]) st[st[0]-1]=1; else st[st[0]-1]=0; st[0]--;}
if (polo[i]==-3) {if (st[st[0]-1] || st[st[0]]) st[st[0]-1]=1; else st[st[0]-1]=0; st[0]--;}
}
fprintf(o,"%d",st[1]);
st[0]=0;
}
return 0;
}