问题描述
小明最近迷上了各种闪闪发光的宝石,成为了一个新晋的宝石收藏家。小明将所有的宝石都排成一列放在一个长长的回廊里,从编号 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;
}
1万+

被折叠的 条评论
为什么被折叠?



