Pagini recente » Clasament preONI 2007, Runda 4, Clasa a 10-a | Cod sursa (job #2709401) | Cod sursa (job #2663460) | Cod sursa (job #144727) | Cod sursa (job #84430)
Cod sursa(job #84430)
#include<stdio.h>
FILE *fin,*fout;
int v[1005],vec[30];
char ch,v1[1005];
int orr(int x,int y)
{
if(x==0&&y==0) return 0;
return 1;
}
int andd(int x,int y)
{
if(x==1&&y==1) return 1;
return 0;
}
int nott(int x)
{
if(x==1) return 0;
return 1;
}
int alpha(char x)
{
return (x>='A'&&x<='Z');
}
int eval(int li,int ls)
{
int desc,min,i,poz,nrpar;
if(li==ls)
if(v[li]==27) return 1;
else if(v[li]==28) return 0;
else return vec[v[li]];
else
{
desc=0;
min=100;
nrpar=1001;
for(i=li;i<=ls;i++)
{
if(v[i]==33) desc++;
else
if(v[i]==34) desc--;
else
{
if(desc==0&&v[i]>=30&&v[i]<=32&&v[i]<min)
min=v[i],poz=i;
}
}
if(min==100)
return eval(li+1,ls-1);
else
{
if(v[poz]==30)
return orr(eval(poz+1,ls),eval(li,poz-1));
else
if(v[poz]==31)
return andd(eval(poz+1,ls),eval(li,poz-1));
else
if(v[poz]==32)
return nott(eval(poz+1,ls));
}
}
}
int main()
{
int nr,i,nr2,n,aux,cont;
nr=i=nr2=n=aux=cont=0;
fin=fopen("bool.in","r");
fout=fopen("bool.out","w");
ch=fgetc(fin);
v1[0]='|';
while(ch!='\n')
{
v1[++nr]=ch;
ch=fgetc(fin);
}
v1[nr+1]=0;
i=0;
while(i<nr)
{
i++;
if(v1[i]!=' ')
nr2++;
if(alpha(v1[i]))
if(alpha(v1[i+1]))
{
if(v1[i]=='N')
v[nr2]=32,i+=2;
else
if(v1[i]=='A')
v[nr2]=31,i+=2;
else
if(v1[i]=='O')
v[nr2]=30,i++;
else
if(v1[i]=='T')
v[nr2]=27,i+=3;
else
v[nr2]=28,i+=4;
}
else
v[nr2]=v1[i]-'A'+1;
else
if(v1[i]=='(')
v[nr2]=33;
else
if(v1[i]==')')
v[nr2]=34;
}
for(ch='A';ch<='Z';ch++)
vec[ch-'A'+1]=0;
fscanf(fin,"%d",&n);
ch=fgetc(fin);
for(cont=1;cont<=n;cont++)
{
ch=fgetc(fin);
aux=ch-'A'+1;
if(vec[aux])
vec[aux]=0;
else vec[aux]=1;
fprintf(fout,"%d",eval(1,nr2));
}
fprintf(fout,"\n");
fcloseall();
}