棒球记录员

 

1. 整数(一轮的得分):直接表示您在本轮中获得的积分数。

2. "+"(一轮的得分):表示本轮获得的得分是前两轮有效回合得分的总和。

3. "D"(一轮的得分):表示本轮获得的得分是前一轮有效回合得分的两倍。

4. "C"(一个操作,这不是一个回合的分数):表示您获得的最后一个有效回合的分数是无效的,应该被移除。

 

8

5 -2 4 C D 9 + +

第1轮:你可以得到5分。总和是:5。 第2轮:你可以得到-2分。总数是:3。 第3轮:你可以得到4分。总和是:7。 操作1:第3轮的数据无效。总数是:3。 第4轮:你可以得到-4分(第三轮的数据已被删除)。总和是:-1。 第5轮:你可以得到9分。总数是:8。 第6轮:你可以得到-4 + 9 = 5分。总数是13。 第7轮:你可以得到9 + 5 = 14分。总数是27。

#include "iostream"
#include "cstring"
#include "stack"
using namespace std;
int n,t;
string s;
int ss(string str){
   int f = 0 ,ans = 0;
   int i=0;
   if(str[0] == '-') i=1,f=1;
    for(i ; i < str.size() ; i++){
        ans = ans*10+str[i]-'0';
   }
    if(f) ans*=-1;
    return ans;
}
int main()
{
    while (cin >> n)
    {
        cin.get();
        getline(cin , s);
        s+=" ";
        string p = "";
        int sum = 0;
        stack<int>q;
        for(int i=0 ; i<s.size() ; i++){
            if(s[i]== ' '){
                if(p == "C"){
                    sum-=q.top();
                    q.pop();
                }else if(p == "D"){
                    sum+=q.top()*2;
                    q.push(q.top()*2);
                }else if(p == "+"){
                    int k = q.top();
                    q.pop();
                    int lp = k+q.top();
                    sum += lp;
                    q.push(k);
                    q.push(lp);
                }else{
                    q.push(ss(p));
                    sum+= ss(p);
                }
                p = "";
            }else{
                p+=s[i];
            }
        }
        cout << sum << endl;
    }

    return 0;
}

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值