CF-1175 B.Catch Overflow!

題目大意:有一個初始變量,值爲0,三種操做 ios

for x 一個循環的開始,循環x次spa

end 一個循環的結束code

add 將變量值加一blog

問最後變量的值是否超過2^32-1,若超過,輸出一串字符,不超過則輸出變量的值ci

 

作法:對於循環結構,有兩種思路,一種是先算出內循環的值,而後再一層一層的向外算;還有一種是從外向內進行變量操做。咱們平時的思考方法應該與思路一比較類似,可是在這個題中會發現很難實現,好比說一個循環內嵌套了兩個並列的循環結構,這就讓人很頭大。因此本題應該採用思路二,思路二一旦想明白了,代碼就不難寫了。io

#include<iostream>
#include<cstdio>
#define maxn 100010
#define Mod 4294967295LL
using namespace std;
long long st[maxn],ans;
int n,top;
char s[100];
int main(){
    scanf("%d",&n);
    st[0]=1;
    while(n--){
        scanf("%s",s+1);
        if(s[1]=='a'){
            ans+=st[top];
            if(ans>Mod){
                puts("OVERFLOW!!!");
                return 0;
            }
        }
        else if(s[1]=='f'){
            long long x;
            cin>>x;
            top=top+1;
            st[top]=st[top-1]*x;
            if(st[top]>Mod)st[top]=Mod+1;
        }
        else top--;
    }
    if(ans>Mod)puts("OVERFLOW!!!");
    else cout<<ans<<endl;
    return 0;
}
相關文章
相關標籤/搜索