Holedox Eating

Time Limit: 4000/2000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others)
Total Submission(s): 2862    Accepted Submission(s): 952

Problem Description
Holedox is a small animal which can be considered as one point. It lives in a straight pipe whose length is L. Holedox can only move along the pipe. Cakes may appear anywhere in the pipe, from time to time. When Holedox wants to eat cakes, it always goes to the nearest one and eats it. If there are many pieces of cake in different directions Holedox can choose, Holedox will choose one in the direction which is the direction of its last movement. If there are no cakes present, Holedox just stays where it is.
 
Input
The input consists of several test cases. The first line of the input contains a single integer T (1 <= T <= 10), the number of test cases, followed by the input data for each test case.The first line of each case contains two integers L,n(1<=L,n<=100000), representing the length of the pipe, and the number of events. 
The next n lines, each line describes an event. 0 x(0<=x<=L, x is a integer) represents a piece of cake appears in the x position; 1 represent Holedox wants to eat a cake.
In each case, Holedox always starts off at the position 0.
 
Output
Output the total distance Holedox will move. Holedox don’t need to return to the position 0.
 
Sample Input
3
10 8
0 1
0 5
1
0 2
0 0
1
1
1

10 7
0 1
0 5
1
0 2
0 0
1
1

10 8
0 1
0 1
0 5
1
0 2
0 0
1
1

 
Sample Output
Case 1: 9
Case 2: 4
Case 3: 2
 
Author
BUPT
 
Source
 
Recommend
zhuyuanchen520
 
题意:在一条直线上一开始一只小动物在0点,然后有两种操作,一种是在某一点上放一块蛋糕,另一种是去吃一块蛋糕。其中吃蛋糕有规定,先吃离小动物最近的蛋糕,如果有两块蛋糕离小动物的距离一样近,先吃当时的朝向的蛋糕,问所有操作以后小动物所走的路多长。
 
#include<iostream>
#include<cstdio>
#include<cstring>
#include<queue> using namespace std; int L,n;
priority_queue<int,vector<int>,greater<int> >q1; //升序,(比loc大的,即蛋糕在自己位置的右边)
priority_queue<int> q2; //降序,(比loc小的,即蛋糕在自己位置的左边)
int loc,dir,ans=; //loc代表自己的位置,dir==0表示向左,dir==1表示向右,ans为答案 void Forward(){ //向前走
int tmp=q1.top();
q1.pop();
ans+=tmp-loc;
loc=tmp;
dir=;
} void Back(){ //向后走
int tmp=q2.top();
q2.pop();
ans+=loc-tmp;
loc=tmp;
dir=;
} int main(){ //freopen("input.txt","r",stdin); int t,cases=;
scanf("%d",&t);
while(t--){
while(!q1.empty())
q1.pop();
while(!q2.empty())
q2.pop();
scanf("%d%d",&L,&n);
loc=,dir=,ans=;
int op,x;
while(n--){
scanf("%d",&op);
if(op==){
scanf("%d",&x);
if(x>=loc)
q1.push(x);
else
q2.push(x);
}else{
if(q1.empty() && q2.empty()) //没有蛋糕则什么也不做
continue;
if(q1.empty() && !q2.empty()){
Back();
continue;
}
if(!q1.empty() && q2.empty()){
Forward();
continue;
}
if(!q1.empty() && !q2.empty()){
int tmp1=q1.top();
int tmp2=q2.top();
if(tmp1-loc>loc-tmp2)
Back();
else if(tmp1-loc<loc-tmp2)
Forward();
else{
if(dir==)
Forward();
else
Back();
}
}
}
}
printf("Case %d: %d\n",++cases,ans);
}
return ;
}

HDU 4302 Holedox Eating (STL + 模拟)的更多相关文章

  1. HDU 4302 Holedox Eating (线段树模拟)

    题意:一个老鼠在一条长度为L的直线上跑,吃蛋糕,老鼠只能沿直线移动.开始时没有蛋糕,老鼠的初始位置是0. 有两个操作,0 x 代表在位置x添加一个蛋糕: 1 代表老鼠想吃蛋糕.老鼠每次都会选择离自己最 ...

  2. hdu 4302 Holedox Eating

    http://acm.hdu.edu.cn/showproblem.php?pid=4302 #include <cstdio> #include <cstring> #inc ...

  3. HDU 4302 Holedox Eating(multiset)

    http://acm.hdu.edu.cn/showproblem.php?pid=4302 题意: 在一条直线上,会有多条命令,如果是0,那么就会在x位置处出现一个蛋糕,如果是1,某人就会找到最近的 ...

  4. hdu 4302 Holedox Eating(优先队列/线段树)

    题意:一只蚂蚁位与原点,在x轴正半轴上会不时地出现一些蛋糕,蚂蚁每次想吃蛋糕时选取最近的去吃,如果前后距离相同,则吃眼前的那一块(即方向为蚂蚁的正前),求最后蚂蚁行进距离. 思路:优先队列q存储蚂蚁前 ...

  5. Holedox Eating HDU4302 模拟

    Problem Description Holedox is a small animal which can be considered as one point. It lives in a st ...

  6. multiset || 线段树 HDOJ 4302 Holedox Eating

    题目传送门 题意:一个长度L的管子,起点在0.n次操作,0 p表示在p的位置放上蛋糕,1表示去吃掉最近的蛋糕(如果左右都有蛋糕且距离相同,那么吃同方向的蛋糕),问最终走了多少路程 分析:用multis ...

  7. hdu------(4302)Holedox Eating(树状数组+二分)

    Holedox Eating Time Limit: 4000/2000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others)To ...

  8. stl+模拟 CCF2016 4 路径解析

    // stl+模拟 CCF2016 4 路径解析 // 一开始题意理解错了.... #include <iostream> #include <string> #include ...

  9. HDU 4041 Eliminate Witches! (模拟题 ACM ICPC 2011亚洲北京赛区网络赛)

    HDU 4041 Eliminate Witches! (模拟题 ACM ICPC 2011 亚洲北京赛区网络赛题目) Eliminate Witches! Time Limit: 2000/1000 ...

随机推荐

  1. 在centos7.4上安装mysql5.5

    from: https://www.digitalocean.com/community/tutorials/how-to-install-mysql-on-centos-7

  2. glGetString(GL_VERSION) returns “OpenGL ES-CM 1.1” but my phone supports OpenGL 2

      [问] I'm trying to make an NDK based OpenGL application. At some point in my code, I want to check ...

  3. Python爬虫实战(一):爬糗事百科段子

    代码: # _*_ coding:utf-8 _*_ import urllib2 import re from datetime import datetime class QSBK: def __ ...

  4. Mybatis源码分析之SqlSession和Excutor(二)

    通过上一篇文章的分析我们,我初步了解了它是如何创建sessionFactory的(地址:Mybatis源码分析之SqlSessionFactory(一)), 今天我们分析下Mybatis如何创建Sql ...

  5. JS判断页面加载完毕

    //JS判断页面加载完毕,再隐藏加载效果层,一个简单的JS加载效果. document.onreadystatechange = function () { if (document.readySta ...

  6. RPi Desktop盒子安装与服务配置

    批量安装配置盒子时候,可以先安装一个,其余的从这台copy过去. 之前的部分shell记录在本地,记录如下,以免忘记.下次可直接cp执行即可: Step1, 创建用户/组 sudo groupadd ...

  7. python解析命令行参数

    常常需要解析命令行参数,经常忘记,好烦,总结下来吧. 1.Python 中也可以所用 sys 的 sys.argv 来获取命令行参数: sys.argv 是命令行参数列表 参数个数:len(sys.a ...

  8. Python实现微信刷卡支付(条码支付)MicroPay

    转载请注明原文地址:http://www.cnblogs.com/ygj0930/p/7686765.html 一:资料阅读 场景介绍:https://pay.weixin.qq.com/wiki/d ...

  9. vi编辑器的常用命令

    游标控制 h 游标向左移 j 游标向下移 k 游标向上移 l (or spacebar) 游标向右移 w 向前移动一个单词 b 向后移动一个单词 e 向前移动一个单词,且游标指向单词的末尾 ( 移到当 ...

  10. Excel之定位和查找

    在数据量比较少的情况下,我们要到达Excel中某一位置时,通常会用鼠标拖动滚动条到达需要的位置,查找某已知固定的值,用Ctr+F,在查找内容中输入对应的值即可一个个的查找到其对应的位置.但当数据量较多 ...