上海计算机学会2024年3月月赛C++丙组T4交易记录
发布时间
阅读量:
阅读量
交易记录
内存限制: 256 Mb时间限制: 1000 ms
题目描述
小爱最近迷上了炒股,他学会了每天做T、即利用股票价格的短期波动来进行买卖操作来赚取差价,因此每天他的账户中会有很多条买卖的交易记录,也因为交易条数过多,他在复盘每天的交易时,时常感到非常困惑。
已知小爱今天的交易共 n 条记录,每条操作包含三个参数 op a b ,若 op 为 SELL 则表示该条交易记录为卖出操作,为 BUY 则表示该条交易记录为买入操作,a表示该笔交易的单价,b表示该笔交易的数量。
请你帮小爱整理今天的交易记录,整理方式如下:
- 若有多笔买入操作价格相同时,将这些买入操作合并成一条,交易数量为合并前各笔交易的数量之和
- 若有多笔卖出操作价格相同时,将这些卖出操作合并成一条,交易数量为合并前各笔交易的数量之和
- 先按价格从低到高 输出所有合并后的买入操作,格式与输入相同
- 再按价格从高到低 输出所有合并后的卖出操作,格式与输入相同
输入格式
输入第一行,一个正整数 n
接下来 n 行,每行表示一条交易操作,其中第 𝑖i 行包含三个参数 op,ai,bi
输出格式
输出第一行,一个正整数表示整理后交易记录的条数。
接下来每行,按题目要求输出整理后的数据。
数据范围
- 对于 30%的数据,1≤n≤10
- 对于 60%的数据,1≤n≤103
- 对于 100%的数据,1≤n≤105,1≤ai,bi≤106
样例数据
输入:
6
BUY 17 10
SELL 50 2
SELL 35 5
BUY 38 6
SELL 50 3
BUY 38 2
输出:
4
BUY 17 10
BUY 38 8
SELL 50 5
SELL 35 5
说明:
买入操作有两次价格为38元,合并后共买入8股
卖出操作有两次价格为50元,合并后共卖出5股
解析:
详见代码:
#include <bits/stdc++.h>
using namespace std;
int n;
struct node{
string op;
int a;
int b;
};
node a[100005];//原始数据
node b[100005];//合并后的数据
//按买入在前,卖出在后排序,操作相同的价高的在前
bool cmp(node x,node y){
if (x.op=="BUY"&&y.op=="BUY"){
return x.a<y.a;
}else if (x.op==y.op){
return x.a>y.a;
}else{
return x.op=="BUY";
}
}
int main() {
cin>>n;
for(int i=1;i<=n;i++){
cin>>a[i].op>>a[i].a>>a[i].b;
}
sort(a+1,a+n+1,cmp);//排序
int cnt=0;//合并后的记录数量
for(int i=1;i<=n;i++){
//操作不同或单价不同,不能合并
if (a[i].a!=b[cnt].a||a[i].op!=b[cnt].op){
cnt++;
b[cnt]=a[i];
}else{//都相同的可以合并
b[cnt].b+=a[i].b;
}
}
cout<<cnt<<endl;
for(int i=1;i<=cnt;i++){
cout<<b[i].op<<" "<<b[i].a<<" "<<b[i].b<<endl;
}
return 0;
}
全部评论 (0)
还没有任何评论哟~
