NTOJ35
这个题是第九届ACM的热身赛。
要点: add( ,)可以想成树 ,左右分别递归即可。
add 只要检测到a即可 i直接后移
( , ) 这几个符合可以不考虑,i直接后移
#include<stdio.h>
#include<string.h>
char an[310];
int i,len;
int sw( int k )
{
if(i >=len )return 0;
int sum = 0,l = 0,r = 0 ;
if(an[i] == 'a')
{
i=i+4;
k = 1;
// printf("1->");
}
else if(an[i] == 'm')
{
i++;
if(an[i] == 'i')
k = 2;
else
k = 3;
i = i+3;
// printf("2->");
}
else if(an[i] >= '0' && an[i]<='9')
{
while(an[i] >= '0' && an[i]<='9')
{
sum = sum*10 + (an[i]-'0');
i++;
}
// printf("3->");
return sum;
}
l = sw(0);
i++; //, 跳过
r = sw(0);
if(k == 1)
sum = l+r;
else if(k == 2)
sum = l<r?l:r;
else
sum = l>r?l:r;
i++; // ) 跳过
return sum;
}
int main()
{
int n,j;
scanf("%d",&n);
for(j = 0;j<n;j++)
{
i = 0;
scanf("%s",&an);
len = strlen(an);
printf("%d\n",sw(0));
}
return 0;
}