您的位置:首页 > 移动开发 > IOS开发

11111 - Generalized Matrioshkas

2014-01-25 18:09 363 查看
题目:11111 - Generalized Matrioshkas

题目大意:判断给的一个序列是否满足下列的要求:

1,是否匹配,例如(-1, 1, 1, 1), (-1)这样不匹配。

2,是否能满足负数先与对应的正数输出,例如(1, -1, 1, -1)这样错误。

3,是否满足将要进栈的数大于栈顶元素。例如(-1, -2, 2,1)这样错误。

4,判断子序列中的孩子相加小于这个序列的首元素,例如(-3,-2,2,-1,1,3)因为这个子序列的孩子= 2+1 不小于3,所以错误。

解题思路:用一个栈来存放,负数进栈,正数如果加上栈顶的负数等于0就出栈(前提栈要不为空),如果不为0就不满足要求。还要判断第一个数如果是正数的话,就直接不满足要求。还要判断子序列的孩子是否小于子序列的首元素。(这里用计数的方法,每次当一个数要进栈时,就将栈顶元素先取下来,孩子的变量减去要进栈的数,标志这个数是我的孩子)。最后在判断栈空吗?不空空就不满足要求。这些要求都满足的就符合要求。

#include<stdio.h>
#include<string.h>
#include<stack>
using namespace std;

const int N = 10000001;
struct toy {

int value;
int childs;

}t
;

stack <toy> st;
int main() {

int len  = 0, i;
char ch;
while(scanf("%d%c", &t[len++].value, &ch) != EOF) {
if(ch == '\n') {

for(i = 0; i < len; i++)
t[i].childs = 0;

bool bo = 1;
for( i = 0; i < len; i++) {

if(t[i].value < 0 && (st.empty() || st.top().value < t[i].value)) {

if(!st.empty()) {
toy a;
a.value = st.top().value;
a.childs = st.top().childs - t[i].value;
st.pop();
st.push(a);

}
st.push(t[i]);

}
else if(!st.empty() && st.top().value > t[i].value) {
bo  = 0;
break;
}
else if(t[i].value > 0 && st.empty() != true) {

if(st.top().value  + t[i].value == 0) {

if(st.top().childs + st.top().value >= 0) {

bo = 0;
break;
}
st.pop();

}
else {

}

}
else {
bo = 0;
break;
}
}
if(!st.empty())
bo = 0;
if(bo)
printf(":-) Matrioshka!\n");
else
printf(":-( Try again.\n");
while(!st.empty())
st.pop();
len = 0;
}
}
return 0;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: