UVA11136Hoax or what( multiset的应用)
2016-03-05 11:57
253 查看
题目链接
题意:n天,每天往一个箱子里放m个数,放完之后取最大的Max和最小的min做差,并把这两个数去掉,求n天之后的和
multiset 和 set的原理是相似的,multiset可以存多个相同的数,而set都是唯一的,同时都是从小到大排列
set容器的总结
set还有lower_bound(x) {返回 第一个大于或者等于x的位置} 和 upper_bound(x) { 返回第一个大于x的位置 }
题意:n天,每天往一个箱子里放m个数,放完之后取最大的Max和最小的min做差,并把这两个数去掉,求n天之后的和
multiset 和 set的原理是相似的,multiset可以存多个相同的数,而set都是唯一的,同时都是从小到大排列
set容器的总结
set还有lower_bound(x) {返回 第一个大于或者等于x的位置} 和 upper_bound(x) { 返回第一个大于x的位置 }
#include <iostream> #include <set> #include <algorithm> #include <cstring> #include <cstdio> using namespace std; multiset<int> s; int main() { int n,m; while(scanf("%d", &n) != EOF && n) { s.clear(); long long ans = 0; int minn,maxn; for(int i = 1; i <= n; i++) { scanf("%d", &m); for(int j = 1; j <= m; j++) { int thing; scanf("%d", &thing); s.insert(thing); } if(s.size() > 0) { multiset<int>::iterator it; it = s.end(); it--; maxn = *it; s.erase(it); // 本来这里写成了s.erase(maxn),错误,应为会把所有的maxn都删除,这里只要删除一个 it = s.begin(); minn = *it; //如果最后只剩下一个数,既是最大又是最小 if(s.size() > 0) { it = s.begin(); s.erase(it); } ans += maxn - minn; } } printf("%lld\n", ans); } return 0; }
相关文章推荐
- 7-1-图、表的数组(邻接矩阵)表示法-图-第7章-《数据结构》课本源码-严蔚敏吴伟民版
- 微信企业号平台开发之获取菜单,创建菜单和删除菜单
- TRIM:提升磁盘性能,缓解Android卡顿
- 设计模式---单例模式
- 欢迎使用CSDN-markdown编辑器
- 取模运算和求余运算的区别
- js 对象与函数的区别
- JavaScript 之理解closure(闭包)
- ExecutorService
- ListViewDemo
- hdu1027
- java小程序
- 如何查看 apahce 已经加在的模块
- iOS:App Extension Keyboard自定义高度
- IT十八掌作业_java基础第二天_进制转换原理和补码存储方式作业
- Git详解之二 Git基础
- Lua_第 14 章 Packages
- 使用基于ThinkPHP3.2.3的ThinkAdmin创建手机电脑通用的表白墙(二)自动判断设备以显示不同界面
- nyoj 合并游戏(状态压缩dp)
- JavaScript之 理解prototype(原型)