B - Catch Overflow!(做题日记)
一个栈的运用。
每次入栈记录下循环次数,并用变量乘以该次数,出栈是除以表示退出循环。
(不知道为什么编译器CE 大哭)
#代码如下(示例):
#include<iostream>
#include<stack>
#include<cmath>
#include<algorithm>
using namespace std;
stack<long int>f;
//int tim[100001];
//long long int cag[100001];
const long long MAX = pow(2, 31) - 1;
//struct SKT
//{
// long long int k;
// int lop = 0;
//};
int main()
{
int t = 0;
int N;
long int x = 0;
long int y = 1;
long int temp = 0;
cin >> N;
for (int i = 1; i <= N; i++)
{
if (x > MAX)
{
cout << "OVERFLOW!!!" << endl;
return 0;
}
string a;
cin >> a;
if (a == "for")
{
int l;
cin >> l;
t++;
y *= l;
f.push(l);
}
else if (a == "add")
{
if (f.size() == 0)
x++;
else
{
temp++;
}
}
else if (a == "end")
{
x += temp * y;
temp = 0;
//t--;
y /= f.top();
f.pop();
}
}
cout << x;
}