Content

账单里面有 \(n\) 条记录,只有卖出记录和买入记录两种,并且都包含两个信息 \(p_i,q_i\),现在根据这些记录,请执行如下操作:

  • 将所有 \(p_i\) 相等的同种记录合并(就是只能卖出记录和卖出记录合并,买入记录和买入记录合并,不能将卖出记录和买入记录合并)。
  • 合并之后,将所有 \(p_i\) 最小的 \(s\) 条卖出记录按照 \(p_i\) 降序输出。将所有 \(p_i\) 最大的 \(s\) 条买入记录按照 \(p_i\) 降序输出。

笔者提醒:买入卖出记录可能不足 \(s\) 条,这时将所有的记录按照 \(p_i\) 降序输出。

数据范围:\(1\leqslant n\leqslant1000,1\leqslant s\leqslant 50,0\leqslant p_i\leqslant 10^5,1\leqslant q_i\leqslant 10^4\)。

Solution

\(n\) 很小,所以我们考虑直接 \(\mathcal{O}(n^2)\) 遍历,看前面是否有 \(p_i\) 和当前的 \(p_i\) 相等,有的话直接合并,否则新开一个存储。然后卖出记录按照从小到大排序后倒序输出,买入记录按照从大到小排序后正序输出即可。

Code

#include <cstdio>
#include <algorithm>
#include <cstring>
#include <cmath>
#include <iostream>
using namespace std; int n, s, socnt, bucnt, visso[100007], visbu[100007];
struct node {
int x, y;
bool operator < (const node& cjy) const {return x < cjy.x;}
}so[1007];
struct node2 {
int x, y;
bool operator < (const node2& cjy) const {return x > cjy.x;}
}bu[1007]; int main() {
scanf("%d%d", &n, &s);
for(int i = 1; i <= n; ++i) {
char opt[2]; int p, q;
scanf("%s%d%d", opt, &p, &q);
if(opt[0] == 'B') {
if(visbu[p]) {
for(int j = 1; j <= bucnt; ++j)
if(bu[j].x == p) {
bu[j].y += q;
break;
}
}
else {
bu[++bucnt] = (node2){p, q};
visbu[p] = 1;
}
} else {
if(visso[p]) {
for(int j = 1; j <= socnt; ++j)
if(so[j].x == p) {
so[j].y += q;
break;
}
}
else {
so[++socnt] = (node){p, q};
visso[p] = 1;
}
}
}
sort(so + 1, so + socnt + 1);
sort(bu + 1, bu + bucnt + 1);
for(int i = min(socnt, s); i >= 1; --i)
printf("S %d %d\n", so[i].x, so[i].y);
for(int i = 1; i <= min(bucnt, s); ++i)
printf("B %d %d\n", bu[i].x, bu[i].y);
return 0;
}

最新文章

  1. 腾讯AlloyTeam移动Web裁剪组件AlloyCrop正式开源
  2. DNS知识指南
  3. [转]useradd 与adduser的区别
  4. phantomjs server + highchart 在服务器端生成highchart图表图片
  5. jstl中添加自定义的函数
  6. struts2 最新S2-016-S2-017漏洞通杀struts2所有版本及修复方法
  7. MySQL常用命令大全(转)
  8. EBS总账(GL)模块常用表
  9. hive的数据导入与数据导出:(本地,云hdfs,hbase),列分隔符的设置,以及hdfs上传给pig如何处理
  10. FilterDispatcher is depredated!plesae use the new filters
  11. ansible roles
  12. Linux系统xinetd服务启动不了
  13. 会议室预订系统(meeting room booking system)
  14. leetcode504
  15. Alpha 冲刺报告(5/10)
  16. oplog扩容
  17. shiro框架的学习
  18. 跟我学算法- tensorflow 卷积神经网络训练验证码
  19. nignx ssl 配置
  20. Linux中线程的挂起与恢复(进程暂停)

热门文章

  1. 了解Threejs中的Clock对象以及简单应用
  2. windows系统开/关机日志位置
  3. 『学了就忘』Linux文件系统管理 — 61、使用parted命令进行分区
  4. 关闭 IDEA 自动更新
  5. fluidity详解
  6. Python基础之数字类型内置方法
  7. Git分布式版本控制系统基础
  8. 5分钟6步强制删除kubernetes NameSpace小技巧
  9. C#数据库连接方式【简版】
  10. 一劳永逸,使用 PicGo + GitHub 搭建个人图床工具