题目来源:洛谷P2827

思路

阅读理解题

一开始以为是裸的优先队列而已

但是发现维护一个切开并且其他的要分别加上一个值很不方便

而且如果直接用优先队列会TLE3到4个点 自测85分

所以我们需要发现题目中蕴含的单调性(我才不会说是从题解中发现的呢)

来自你谷aiyougege大佬的证明:

先被切掉的蚯蚓分成的蚯蚓一定比后切掉的蚯蚓分成的蚯蚓大. 假设这两只蚯蚓分别为a,b

其中a>b 那么它被切成a1​,a2​.t秒后, b被切成了b1​,b2​.

此时a1​,a2​的长度为​​La1*p+t,La2*(1-p)+t   b1,b2的长度为p*(Lb1+t),(1-p)(Lb2+t)

因为p小于1 所以a1>b1,a2>b2

也就是说根本不需要用一个堆来维护, 它本来就具有一定单调性.

所以我们只需要开三个队列来分别存下一开始的单调序列(sort一遍)q1 每次切割的较大的长度q2 每次切割的较小的长度q3

这样三个队列就都是单调的了

所以我们每次只需要找出三个队列中的队首最大值来切割

然后把切割的较大值放入q2 较小值放入q3即可

现在需要思考如何让蚯蚓生长

如果每次切割之后把其他蚯蚓遍历一遍肯定不现实

所以我们考虑直接在要切割的蚯蚓长度减去其他蚯蚓要增加的长度 

那么从相对的角度来说 其他的蚯蚓就算是生长了

我们只需要记录这个减去的长度 后面再加上即可

代码

#include<iostream>
#include<algorithm>
#include<cmath>
#include<queue>
using namespace std;
#define maxn 7500000
#define ll long long
ll n,m,q,u,v,t,add,tot;
ll ans[maxn],len[maxn];
queue<int> q1,q2,q3;
bool cmp(int x,int y)
{
return x>y;
}
ll getmax()//取最大值
{
ll x1,x2,x3;
x1=x2=x3=-1e9+;
if(!q1.empty()) x1=q1.front();
if(!q2.empty()) x2=q2.front();
if(!q3.empty()) x3=q3.front();
if(x1>=x2&&x1>=x3)
{
q1.pop();
return x1;
}
if(x2>=x1&&x2>=x3)
{
q2.pop();
return x2;
}
if(x3>=x2&&x3>=x1)
{
q3.pop();
return x3;
}
}
void put(ll x,ll y)//比较放入队列
{
if(x<y) swap(x,y);
q2.push(x);
q3.push(y);
}
int main()
{
cin>>n>>m>>q>>u>>v>>t;
for(ll i=;i<=n;i++) cin>>len[i];
sort(+len,+len+n,cmp);//维护q1单调性
for(ll i=;i<=n;i++) q1.push(len[i]);
for(ll i=;i<=m;i++)
{
ans[i]=getmax()+add;//add为相对增加值
ll x=ans[i]*u/v;//计算被切割开的长度
ll y=ans[i]-x;
add+=q;//增加相对值
put(x-add,y-add);//注意这里要减去蚯蚓长度
}
while(!q1.empty()||!q2.empty()||!q3.empty())//最后剩下的蚯蚓按降序存储
len[++tot]=getmax()+add;
for(ll i=t;i<=m;i+=t)//注意输出方式
cout<<ans[i]<<" ";
cout<<endl;
for(ll i=t;i<=tot;i+=t)//注意输出方式
cout<<len[i]<<" ";
cout<<endl;
}

【题解】洛谷P2827 [NOIP2016TG] 蚯蚓(优先队列)的更多相关文章

  1. 题解——洛谷P2827 NOIP提高组 2016 蚯蚓

    队列模拟 详细题解待填坑 #include <cstdio> #include <algorithm> #include <queue> #include < ...

  2. 洛谷P2827 蚯蚓 题解

    洛谷P2827 蚯蚓 题解 题目描述 本题中,我们将用符号 ⌊c⌋ 表示对 c 向下取整. 蛐蛐国最近蚯蚓成灾了!隔壁跳蚤国的跳蚤也拿蚯蚓们没办法,蛐蛐国王只好去请神刀手来帮他们消灭蚯蚓. 蛐蛐国里现 ...

  3. NOIP 2016 洛谷 P2827 蚯蚓 题解

    题目传送门 展开 题目描述 本题中,我们将用符号[c]表示对c向下取整,例如:[3.0」= [3.1」=[3.9」=3.蛐蛐国最近蚯蚓成灾了!隔壁跳 蚤国的跳蚤也拿蚯蚓们没办法,蛐蛐国王只好去请神刀手 ...

  4. 洛谷P2827 蚯蚓——思路题

    题目:https://www.luogu.org/problemnew/show/P2827 思路... 用优先队列模拟做的话,时间主要消耗在每次的排序上: 能不能不要每次排序呢? 关注先后被砍的两条 ...

  5. 洛谷 P2827 BZOJ 4721 UOJ #264 蚯蚓

    题目描述 本题中,我们将用符号表示对c向下取整,例如:. 蛐蛐国最近蚯蚓成灾了!隔壁跳蚤国的跳蚤也拿蚯蚓们没办法,蛐蛐国王只好去请神刀手来帮他们消灭蚯蚓. 蛐蛐国里现在共有n只蚯蚓(n为正整数).每只 ...

  6. 【题解】洛谷P2822 [NOIP2016TG ]组合数问题 (二维前缀和+组合数)

    洛谷P2822:https://www.luogu.org/problemnew/show/P2822 思路 由于n和m都多达2000 所以暴力肯定是会WA的 因为整个组合数是不会变的 所以我们想到存 ...

  7. 洛谷P3832 [NOI2017]蚯蚓排队 【链表 + 字符串hash】

    题目链接 洛谷P3832 题解 字符串哈希然后丢到hash表里边查询即可 因为\(k \le 50\),1.2操作就暴力维护一下 经复杂度分析会发现直接这样暴力维护是对的 一开始自然溢出WA了,还以为 ...

  8. 题解 洛谷P5018【对称二叉树】(noip2018T4)

    \(noip2018\) \(T4\)题解 其实呢,我是觉得这题比\(T3\)水到不知道哪里去了 毕竟我比较菜,不大会\(dp\) 好了开始讲正事 这题其实考察的其实就是选手对D(大)F(法)S(师) ...

  9. 题解 洛谷 P3396 【哈希冲突】(根号分治)

    根号分治 前言 本题是一道讲解根号分治思想的论文题(然鹅我并没有找到论文),正 如论文中所说,根号算法--不仅是分块,根号分治利用的思想和分块像 似却又不同,某一篇洛谷日报中说过,分块算法实质上是一种 ...

随机推荐

  1. Eclipse使用快捷键总结

    1.为方法添加注释:Alt + Shift + J

  2. Eclipse添加JBOSS支持

    Eclipse安装Drools插件(Drools and jBPM tools)时无法安装JBoss Runtime Drools Detector,需要给eclipse安装JBOSS的基础环境,具体 ...

  3. Hibernate 性能优化一对一关联映射

    概述: hibernate提供了两种映射一对一关联的方式:按照外键映射和按照主键映射. 下面以员工账号和员工档案为例 ,介绍两种映射方式,并使用这两种映射方式分别完成以下持久化操作: (1)保存员工档 ...

  4. CSS性能优化新属性:will-change

    ---恢复内容开始--- will-change属性通过告诉浏览器什么属性.什么元素将会发生变化,可以对这些操作进行可能性的优化,由此提高CSS动画的执行效率. 这个属性可以有4个值: auto: 实 ...

  5. hdu 1087 Super Jumping! Jumping! Jumping!(最大上升子序列和)

    Super Jumping! Jumping! Jumping! Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 ...

  6. JS调用AngularJS中的方法

    案例: 在IONIC中使用百度地图的JS版SDK,在该JS相关界面中需要触发点击事件来实现在Ionic的JS中定义的函数,参考方法如下: onclick="var $scope = angu ...

  7. DevExpress.XtraGrid

    DevExpress.XtraGrid控件使用 该控件类是一个表格控件,但是其具有很多方便而使用的功能,例如可以对记录进行分组,可以再记录的前面加上checkbox,可以将具有相同值的cell 进行合 ...

  8. CI框架, 参数验证

    /** * 统一API参数检验方法 * * 调用示例 check_param(array('money' => array('required', 'integer', 'greater_tha ...

  9. python 图形界面

    Python自带的库是支持Tk的Tkinter,使用Tkinter,无需安装任何包,就可以直接使用. Tk是一个图形库,支持多个操作系统 导入Tkinter包的所有内容: from tkinter i ...

  10. 删除datatable的行后,出现“不能通过已删除的行访问该行的信息”的错误,即DeletedRowInaccessibleException

    删除datatable的行后,出现“不能通过已删除的行访问该行的信息”的错误 =========================================================== 采 ...