#D. 宝石收藏家

问题描述

小明最近迷上了各种闪闪发光的宝石,成为了一个新晋的宝石收藏家。小明将所有的宝石都排成一列放在一个长长的回廊里,从编号 1 开始。

小明每次去宝石市场都会买若干个同样的宝石,并会把它们在自己的收藏中依次放入末尾。

有时候,小明也会缺钱,他就会从最近购买的宝石依次按原价出售,凑够自己需要的钱(小明卖完所有宝石一定能凑够自己需要的钱)。每次卖了宝石多余的钱,就被小明直接花掉啦。

现在给出 n 次小明购买与缺钱的操作,问小明最后的宝石收藏列表。

输入格式

第一行包含一个正整数 n (1≤n≤105), 代表小明操作次数;

接下来 n 行每行首先输入一个整数 op 。当 op==1 时,表示小明购买了宝石,接下来输入一个字符串与两个整数 s 、p 、k,分别代表宝石的名称(由小写字母组成)、宝石的单价、购买的个数。当 op==2 时,表示小明缺钱了,接下来输入一个整数 x ,代表小明缺少的钱数。

1≤p, x≤106, ∑k≤106,小明买的所有宝石数量之和小于等于 106 。

输出格式

输出一行,按顺序输出小明的宝石收藏,宝石的名称之间用空格隔开。

6
1 jade 71 1
1 pearl 43 2
2 9
1 agate 4 3
1 amber 45 5
2 200

Copy

jade pearl agate agate agate
#include<bits/stdc++.h>
using namespace std;
struct node{
    string s;
    int p,k;
};
vector<node> a;
int main(){
    int n;
    cin>>n;
    for(int i=0;i<n;i++){
        int op;
        cin>>op;
        if(op==1){
            node t;
            int k;
            cin>>t.s>>t.p>>k;
            for(int j=0;j<k;j++){
                a.push_back(t);
            }
        }else{
            int x;
            cin>>x;
            while(x>0){
                x-=a[a.size()-1].p;
                a.pop_back();
                    
            }
        }
    }
    for(int i=0;i<a.size();i++){
        cout<<a[i].s<<" ";
    }
    return 0;
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值