hdu 4286 Alice and Bob --贪心
2013-10-05 11:28
274 查看
思路:(参考网络上的思路)
1)先对坐标排序,若h不等,则对h升序排序,否则对w进行升序排序
2)排序后之后,扫描Alice的手牌,把所有Bob[j].h小于等于Alice[i].h
的Bob[j].w放入一个集合中,并且在该集合中找到第一个大于Alice[i].w的Bob[x].w
那么Bob[x-1].w就是跟Alice[i].w最接近的牌,若存在则删除之。
1)先对坐标排序,若h不等,则对h升序排序,否则对w进行升序排序
2)排序后之后,扫描Alice的手牌,把所有Bob[j].h小于等于Alice[i].h
的Bob[j].w放入一个集合中,并且在该集合中找到第一个大于Alice[i].w的Bob[x].w
那么Bob[x-1].w就是跟Alice[i].w最接近的牌,若存在则删除之。
#include <iostream> #include <algorithm> #include <set> using namespace std; #define N 100010 typedef struct Node_ { int h, w; }Node; Node Alice ; Node Bob ; int cmp(Node a, Node b) { if (a.h == b.h) { return a.w < b.w; } return a.h <= b.h; } int main() { int t, i, j,n, sum; scanf("%d", &t); while(t--) { scanf("%d", &n); for (i = 0;i < n;++i) { scanf("%d %d", &Alice[i].h, &Alice[i].w); } for (i = 0;i < n;++i) { scanf("%d %d", &Bob[i].h, &Bob[i].w); } sort(Alice, Alice + n, cmp); sort(Bob, Bob + n, cmp); sum = 0; multiset<int> m_set; for (i = 0, j = 0;i < n;++i) { while (j < n && Alice[i].h >= Bob[j].h) { m_set.insert(Bob[j].w); ++j; } if (m_set.size() != 0) { multiset<int>::iterator iter = m_set.upper_bound(Alice[i].w); if (iter != m_set.begin()) { sum++; iter--; m_set.erase(iter); } } } printf("%d\n", sum); } return 0; }
相关文章推荐
- Oracle DB 使用快速恢复区
- 让CPU占用率曲线听你指挥
- RPM安装命令总结
- 树的遍历——pat1043
- 苹果告知Mac开发者Mavericks将支持教育类和企业类用户批量购买
- iPhone开发之UISearchBar学习
- 以太网 局域网 城域网 广域网
- 自动更新的一个小问题
- 给定无序自然数数组,求最大连续自然数个数,时间复杂度为O(n)
- 《算法设计手册》杂题3道
- 自学v512工作室_刘伟_Java高端培训系列视频_log4j遇到的问题
- C# 无边框窗体之窗体移动
- java 字符串倒叙
- Linux常用命令
- ajax同步提交
- c++ singleton
- redhat 安装Yum
- XP下运行VS2010生成程序报错:unable to find a version of the runtime to run this application
- 《Oracle Database 12c DBA指南》第二章 - 安装Oracle和创建数据库(2.1 安装Oracle数据库软件和创建数据库概览)
- Linux SSH连接-客服端操作 配置