#include<iostream>
#include<stdio.h>
#include<stack>
using namespace std;
//用栈模拟, 遇到负数入栈; 正数则与栈顶匹配, 若匹配成功则消去栈顶 , 否则也入栈。
//栈的元素是结构体, 除了上面的括号自身的数值value外, 还有所有直接子括号的和sum。
//在负数入栈前, 要把它的数值加到栈顶(如果empty就不用)的sum, 并判断, 判断完才能入栈。
struct atr
{
int value;
int sonvalue;
};
stack<atr>s;
char ch;
int value;
bool ok;
bool judge();
void TCW();
void star();
int main(){
star();
while (~scanf_s("%d%c", &value, &ch)){
if (ch == '\n'){
TCW();
if (judge()){
printf(":-) Matrioshka!\n");
}
else {
printf(":-( Try again.\n");
}
star();
}
else {
TCW();
}
}
//printf("%d", value);
return 0;
}
bool judge(){
if (ok&&s.empty())
return true;
else return false;
}
void TCW(){
atr st;
st.value = value;
st.sonvalue = 0;
if (value < 0){
if (s.empty()) s.push(st);
else {
s.top().sonvalue += st.value;
if (s.top().sonvalue <= s.top().value){
ok = false;
}
s.push(st);
}
}
else if (s.empty()){ ok = false; }
else if (s.top().value == -st.value) {
s.pop();
}
else s.push(st);
}
void star(){
while (!s.empty()){
s.pop();
}
ok = true;
}
uva11111
最新推荐文章于 2017-09-03 17:56:21 发布