Pagini recente » Cod sursa (job #108446) | Cod sursa (job #2437672) | Cod sursa (job #561709) | Cod sursa (job #187666) | Cod sursa (job #594496)
Cod sursa(job #594496)
// -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') {polo[++polo[0]]=-4; i+=2; continue;}
if (s[i]=='A' && s[i+1]=='N') { st[++st[0]]=-2; i+=2; continue;}
if (s[i]=='O' && s[i+1]=='R') {while (st[st[0]]==-2) {polo[++polo[0]]=-2; 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) {i++; st[++st[0]]=1-v[polo[i+1]];}
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;
}