題意:

類似括號匹配的題目,負整數是左括號,正整數是右括號,但是有另一個要求,那就是被括在中間的大小相加只能小於外面的框框

-9 -7 7 -2 2 9

這樣的話在9之間的是7+2會等於九,所以不行,但是

-9 -7 -2 2 7 9

這樣是7包2,9包7,所以可以

 

解法:

用stack做括號匹配,額外記錄一個值表示那個括號的剩餘空間,若剩餘空間不夠大則輸出不行

要注意input格式以及可能會有單一數字的情況

 

程式碼:

#include <stdio.h>
#include <string.h>
#include <stdlib.h>

int s[1234567];
int l[1234567];
int sNum;

int main(){
    int num;
    char ch;
    int gg;
    while(scanf("%d%c",&s[1],&ch)!=EOF){
        l[1] = s[1];
        sNum = 1;
        if(s[1]>0) gg=1;
        else gg = 0;
        if(ch!='\n'){
            while(scanf("%d%c",&num,&ch)!=EOF){
                if(num<0){
                    if(num>l[sNum]){
                        l[sNum] -= num;
                        s[++sNum] = num;
                        l[sNum] = num;
                    }
                    else gg = 1;
                }
                else {
                    if(sNum<=0 || s[sNum]!=-num)gg = 1;
                    else --sNum;
                }
                if(ch=='\n')break;
            }
        }
        if(sNum>0 || gg)puts(":-( Try again.");
        else puts(":-) Matrioshka!");
    }
    return 0;
}

arrow
arrow
    全站熱搜

    alan790712 發表在 痞客邦 留言(0) 人氣()