Catch Overflow!
题意 end相当于 } add相当于 自增加一
eg
for(66){
add
for(666){
add
}
add
}
可以理解为
for 66
add
for 666
add
end
add
end
本题关键就是用一个数组标记for循环的层数 判断是再那一层
#include<bits/stdc++.h>
using namespace std;
#define MN 300005
#define MM 600005
#define ll long long
#define mod 998244353
#define inf 100000000000ll
int n,y[MN],t;//y是读入for循环后的数字第数组
ll x,k[MN];//k是标记层数的数组
char s[120];
int main(){
scanf("%d",&n);
k[0]=1;
while(n--){
scanf("%s",s);
if(*s=='f'){
++t;
scanf("%d",&y[t]);
k[t]=k[t-1]*y[t];//当下的循环数等于上一次的k[]的个数乘以当下输入的y[]
if(k[t]>=inf)k[t]=inf;
}
if(*s=='e'){
//如果遇到end t-- 回到上一部的k
--t;
}
if(*s=='a'){
//如果遇到add 将此次的for循环个数加起来
x+=k[t];
if(x>=inf)x=inf;
}
}
if(x>4294967295ll)puts("OVERFLOW!!!");
else printf("%lld\n",x);
return 0;
}