题目描述
球球大作战的球球们被俘虏到了一维空间(也就是一条直线)中!
每个球球都喜欢到处乱跑,当一个球球遇到比它更大的球球的时候就会原地爆炸(也就是消失不见)!
每个球球都有一个大小,由于在一维空间中只有两个方向,所以正数代表向右,负数代表向左!
所有球球的运动速度是相等的,时间是无限的。
碰撞规则:两个球球相撞,较小的球球会消失,若两个球球大小相等,就会同归于尽(一起消失)!
你的任务是按照碰撞规则输出碰撞后剩下的所有球球!
(如果所有球球都牺牲了,记得输出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;
}
大佬帮个忙?