HDU 4302 Holedox Eating(multiset)
2016-03-06 20:42
330 查看
题目链接:点击打开链接
题意:有个吃货在坐标为0~L的线段上, 开始在0位置, n个操作, 0 x 表示在x位置放一个蛋糕, 1 表示这个吃货会吃掉离她最近的一个蛋糕。 如果在左右两边都有离她最近的,就按照上次的方向吃。
思路:用multiset维护蛋糕的位置, 用二分查找加速算法, 乱搞即可。
细节参见代码:
题意:有个吃货在坐标为0~L的线段上, 开始在0位置, n个操作, 0 x 表示在x位置放一个蛋糕, 1 表示这个吃货会吃掉离她最近的一个蛋糕。 如果在左右两边都有离她最近的,就按照上次的方向吃。
思路:用multiset维护蛋糕的位置, 用二分查找加速算法, 乱搞即可。
细节参见代码:
#include<cstdio> #include<cstring> #include<algorithm> #include<iostream> #include<string> #include<vector> #include<stack> #include<bitset> #include<cstdlib> #include<cmath> #include<set> #include<list> #include<deque> #include<map> #include<queue> #define Max(a,b) ((a)>(b)?(a):(b)) #define Min(a,b) ((a)<(b)?(a):(b)) using namespace std; typedef long long ll; typedef long double ld; const ld eps = 1e-9, PI = 3.1415926535897932384626433832795; const int mod = 1000000000 + 7; const int INF = 0x3f3f3f3f; // & 0x7FFFFFFF const int seed = 131; const ll INF64 = ll(1e18); const int maxn = 100; int T,n,m,L,x,id,kase=0; multiset<int> g; int main() { scanf("%d",&T); while(T--) { scanf("%d%d",&L,&n); g.clear(); int pos = 0, dir = 1; ll ans = 0; multiset<int> :: iterator it, itt; while(n--) { scanf("%d",&id); if(id == 0) { scanf("%d",&x); if(x < 0 || x > L) continue; g.insert(x); } else { if(g.empty()) continue; it = g.lower_bound(pos); if(*it == pos) { g.erase(it); continue; } if(it == g.end()) --it; if(*it < pos) { ans += abs(*it - pos); pos = *it; g.erase(it); dir = 0; continue; } if(it != g.begin()) { itt = it; --itt; if(abs(*itt - pos) > abs(*it - pos)) { ans += abs(*it - pos); pos = *it; g.erase(it); dir = 1; } else if(abs(*itt - pos) < abs(*it - pos)) { ans += abs(*itt - pos); pos = *itt; g.erase(itt); dir = 0; } else { if(dir == 0) ans += abs(*itt - pos), pos = *itt, g.erase(itt), dir = 0; else ans += abs(*it - pos), pos = *it, g.erase(it), dir = 1; } } else { ans += abs(*it - pos); pos = *it; dir = 1; g.erase(it); } } } printf("Case %d: %I64d\n",++kase,ans); } return 0; }
相关文章推荐
- yii 用户管理 controller
- FZU 2195 思维
- Linux内核分析— —操作系统是如何工作的(20135213林涵锦)
- static 用法详细解释
- 常用未分类命令
- 使用Arduino读取噪声传感器分贝值
- 安卓手机恢复大师镜像存储的使用教程
- 详解Python中的下划线
- How to Develop blade and soul Skills
- 写给自己
- Java中equals、==、hashcode的区别
- poj 2533 dp
- Web安全之点击劫持(ClickJacking)
- STL与泛型编程<四>:List
- 二叉搜索树的后序遍历序列
- 设计模式之外观模式(Facade)
- 并查集
- 总结
- 批判性思维——Asking The Right Questions
- 20135302魏静静Linux内核分析第二周学习总结