题目描述
给定 k 个整数 a1…k,维护一个序列,按顺序进行以下操作:
- 当 ai=0 时,将序列中最后加入的数删除。
- 否则,将 ai 加入序列。
例如:当 a={1,3,5,4,0,0,7,0,0,6} 时,操作如下。
ai | 序列 |
---|---|
1 | {1} |
3 | {1,3} |
5 | {1,3,5} |
4 | {1,3,5,4} |
0 | {1,3,5} |
0 | {1,3} |
7 | {1,3,7} |
0 | {1,3} |
0 | {1} |
6 | {1,6} |
你需要计算最终序列中所有数的和。
输入格式
第一行一个整数 k。
接下来 k 行,每行一个整数 ai。
输出格式
输出一行一个整数,表示最终序列中所有数的和。
嘶烤
输入0时让我们删除数据,不是0时就输入数据,蒟蒻不会栈怎么办?头顶标数法用列表也可以头顶在哪里?我们用一个k做变量用k给新数当索引覆盖到0的上一个数上,最后一位应该被删除却没有删怎么办?再后面遍历的时候最后一个该删除的是不会被遍历的。
禔碣
#include <bits/stdc++.h>
using namespace std;
int t,x,k,ans=0,a[100005];
int main(){
cin>>t;
while(t--){
cin>>x;
if(x!=0)a[k+=1]=x;
else k--;
}
for(int i=1;i<=k;i++)ans+=a[i];
cout<<ans<<endl;
return 0;
}