什么是栈?
栈是一个先进后出的容器,你可以理解为一个只有一边能够打开的羽毛球筒,那我们想把最里面的羽毛球取出来,就得把所有羽毛球都取出来,这就是栈。
我们需要将给出的 n 个正整数逐一加入到栈中,但是在每次入栈时,如果我们发现有以下两种情况,就需要做出相应的操作:
有一个叫做小红的人,他非常喜欢喝茶。他有 x 个奇怪的杯子,每个杯子都可以装入一个正整数。小红决定将这些杯子中的个数字压入一个栈中,但他有些规矩:每次他要向栈中压入一个数字,如果这个数字与栈顶数字相同,他就会将这两个数字取出来相加,并且将它们的和的两倍压入栈中。另外,如果栈顶数字等于前面连续的 y 个数字的和(1 ≤ y ≤ x),他也会将这 y 个数字取出来相加,并且将它们的和的两倍压入栈中。当然,如果以上两个规则都不满足,他就不会进行任何操作。现在,小红将一组正整数依次压入栈中,请你告诉他最终栈中剩下的数字是什么。
使用单个空格隔开的正整数的字符串,如"5 6 7 8", 左边的数字先入栈。
正整数的范围为[1, 231−1]
正整数个数的范围为[1,1000]。
最终栈中存留的元素值,元素值使用的单个空格隔开,如"8 7 6 5", 从做至右依次为栈顶至栈底的数字。
输入
55 66 121 5 5
输出
10 242
解释:向栈压入 121 时,55 + 66 = 121 ,数据合并后入栈 242 ,压入两个 5 时,合并为 10 ,最终栈顶至栈底的数字为 10 和 242 .
输入
7 5 8 9 3
输出
3 9 8 5 7
解释:无任何整数合并