愤怒的球球谁会?

题目描述

球球大作战的球球们被俘虏到了一维空间(也就是一条直线)中!

每个球球都喜欢到处乱跑,当一个球球遇到比它更大的球球的时候就会原地爆炸(也就是消失不见)!

每个球球都有一个大小,由于在一维空间中只有两个方向,所以正数代表向右,负数代表向左!

所有球球的运动速度是相等的,时间是无限的。

碰撞规则:两个球球相撞,较小的球球会消失,若两个球球大小相等,就会同归于尽(一起消失)!

你的任务是按照碰撞规则输出碰撞后剩下的所有球球!

(如果所有球球都牺牲了,记得输出GAME OVER)

输入格式

第一行为一个正整数 N 表示一维空间中球球的数量。

接下来的一行中有 N 个整数,每个整数代表一个球球balls[i],整数的值为球球的大小,正负代表球球的运动方向

输出格式

共1行,输出碰撞后剩下的球球大小,用空格分隔

样例 #1

样例输入 #1

3
5 10 -5

样例输出 #1

5 10

样例解释 #1

10 和 -5 碰撞后只剩下 10 。 5 和 10 永远不会发生碰撞。

样例输入 #2

2
8 -8

样例输出 #2

GAME OVER

数据范围

对于40%的数据

2<=n<=100
-20<=balls[i]<=20
balls[i] != 0

对于100%的数据

2<=n<=10000
-1000<=balls[i]<=1000
balls[i] != 0

#include<iostream>
#include<stack>
using namespace std;
int main(){
  stack<int>s;
  stack<int>st;
  int n,x;
  cin>>n;
  cin>>x;
  s.push(x);
  for(int i=1;i<n;i++){
    cin>>x;
    if(s.top()>0&&x<0){
      if(s.top()==0-x)s.pop();
      if(s.top()<0-x){
        s.pop();
        s.push(x);
      }
    }
    else s.push(x);
  }
  if(s.empty())cout<<"GAME OVER";
  else{
    for(int i=0;i<n;i++){
      st.push(s.top());
      s.pop();
    }
    for(int i=0;i<n;i++){
      cout<<st.top()<<' ';
      st.pop();
    }
  }
  return 0;
}

大佬帮个忙?