題意:
類似括號匹配的題目,負整數是左括號,正整數是右括號,但是有另一個要求,那就是被括在中間的大小相加只能小於外面的框框
-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;
}