uva11111

来源:互联网 发布:域名注册软件 编辑:程序博客网 时间:2024/06/08 02:45
#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;}

0 0