题目大意
解题思路
开一个栈模拟即可。
code
#include<set>
#include<cmath>
#include<cstdio>
#include<cstring>
#include<iostream>
#include<algorithm>
#define LL long long
#define LD double
#define max(a,b) ((a>b)?a:b)
#define min(a,b) ((a>b)?b:a)
#define fo(i,j,k) for(int i=j;i<=k;i++)
#define fd(i,j,k) for(int i=j;i>=k;i--)
using namespace std;
int const inf=2147483647;
int const maxn=32000;
int n,a[maxn+10];
int main(){
freopen("form.in","r",stdin);
freopen("form.out","w",stdout);
char ch=getchar();
int cas=0,dep=0;
for(;ch!=EOF;){
for(;(ch!=EOF)&&(ch!='(')&&(ch!=')')&&(ch!='T')&&(ch!='F');)ch=getchar();
if(ch==EOF)break;
if(ch=='('){
a[++dep]=-1;
}else if(ch==')'){
dep--;
if(a[dep]==-1)a[dep]=a[dep+1];
else if(dep&1)a[dep]=(a[dep]&&a[dep+1]);
else a[dep]=(a[dep]||a[dep+1]);
}else{
if(a[dep]==-1)a[dep]=(ch=='T');
else if(dep&1)a[dep]=(a[dep]&&(ch=='T'));
else a[dep]=(a[dep]||(ch=='T'));
}
if(dep==0){
cas++;
if(a[1])printf("%d. true\n",cas);
else printf("%d. false\n",cas);
}
ch=getchar();
}
return 0;
}