【Luogu】P2827蚯蚓(堆转队列)
按照国际惯例先发题目链接
woc从4月就开始做这sb题。最开始30分升到65分不管了,直到最近几天升到85分,再到今天AC。激动的心情自然是那些一遍就A或者一小时以内就A的神犇难以想象的。
下面说说主要几个分段。
# 35分
按题意用堆模拟。每次暴力修改蚯蚓长度,于是get皮肤:TLE蓝。
# 65分
考虑到暴力修改消耗的时间复杂度过大,于是考虑偷懒。既然我们不能暴力增长已经存进堆的蚯蚓长度,那就剪短将要存进堆的蚯蚓长度。将目前蚯蚓增加的长度记为mark,从堆里取出来的蚯蚓长度+mark,要存进堆的蚯蚓长度-mark再-q。每次循环mark+=q。
# 100分
先忽略mark和q。蚯蚓肯定是越切越短,那我们还用堆干嘛?直接开三个队列存蚯蚓,第一个队列存输入的蚯蚓,对于切出来的每条蚯蚓,长的放第二个队列,短的放第三个队列。
可以得到三个队列都是单调递减的。取出的蚯蚓从三个队列的队头取最大的。这样就转化为普通队列解法。
代码如下
#include<iostream>
#include<cctype>
#include<cmath>
#include<cstdio>
#include<algorithm>
using namespace std; bool cmp(int a,int b){return a>b;} inline long long read(){
long long num=,f=;
char ch=getchar();
while(!isdigit(ch)){
if(ch=='-')f=-;
ch=getchar();
}
while(isdigit(ch)){
num=(num<<)+(num<<)+ch-'';
ch=getchar();
}
return num*f;
} inline long long swap(long long a,long long b){long long temp=a;a=b;b=temp;} long long mark; long long n,m,q,u,v,t;
long long que[];
long long f[],d[],fh=,dh=,ft,dt,qt=; int main(){
n=read();m=read();q=read();u=read();v=read();t=read();
for(int i=;i<=n;++i)que[i]=read();
sort(que+,que+n+,cmp);
for(int i=;i<=m;++i){
long long data=-;
if(data<que[qt]&&qt<=n)data=que[qt];
if(data<f[fh]&&ft-fh>-)data=f[fh];
if(data<d[dh]&&dt-dh>-)data=d[dh]; if(data==que[qt]&&qt<=n)qt++;
else if(data==f[fh]&&ft-fh>-)fh++;
else if(dt-dh>-)dh++; data+=mark;
long long a=data*u/v;
long long b=data-a;
if(a<b)swap(a,b);
f[++ft]=a-mark-q;
d[++dt]=b-mark-q;
if(!(i%t))printf("%lld ",data);
mark+=q;
}
printf("\n");
for(int i=;i<=n+m;++i){
long long data=-;
if(data<que[qt]&&qt<=n)data=que[qt];
if(data<f[fh]&&ft-fh>-)data=f[fh];
if(data<d[dh]&&dt-dh>-)data=d[dh]; if(data==que[qt])qt++;
else if(data==f[fh]&&ft-fh>-)fh++;
else if(dt-dh>-)dh++; data+=mark;
if(!(i%t))printf("%lld ",data);
}
return ;
}
【Luogu】P2827蚯蚓(堆转队列)的更多相关文章
- [Luogu P2827] 蚯蚓 (巧妙的模拟)
题面: 传送门:https://www.luogu.org/problemnew/show/P2827 Solution 看到这题,我们肯定会有一个大胆想法. 那就是直接用堆模拟这个过程. 对于q,我 ...
- 【BZOJ】4721: [Noip2016]蚯蚓 / 【洛谷】P2827 蚯蚓(单调队列)
Description 本题中,我们将用符号[c]表示对c向下取整,例如:[3.0」= [3.1」=[3.9」=3.蛐蛐国最近蚯蚓成灾了!隔壁跳 蚤国的跳蚤也拿蚯蚓们没办法,蛐蛐国王只好去请神刀手来帮 ...
- Luogu P2827 蚯蚓(模拟)
P2827 蚯蚓 题意 题目描述 本题中,我们将用符号\(\lfloor c\rfloor\)表示对\(c\)向下取整,例如:\(\lfloor 3.0\rfloor =\lfloor 3.1\rfl ...
- 【luogu P2827 蚯蚓】 题解
题目链接:https://www.luogu.org/problemnew/show/P2827 35分:暴力sortO(mnlogn). 80分:考虑到每次不好维护不被切的点+q,正难则反.改成维护 ...
- Luogu P2827 蚯蚓
看到题目就可以想到直接开的堆模拟的过程了吧,这个还是很naive的 注意在用堆做的时候也是要明智一点的,对于蚯蚓长度的相加肯定不能直接遍历并加上,还是可以差分一下的 其实说白了就是把集体加->单 ...
- LUOGU P2827 蚯蚓 (noip 2016)
传送门 解题思路 第一眼以为是一个二叉堆,直接上优先队列60分...后来听ztz11说有单调性,新加入的蚯蚓一定比原先在的蚯蚓长度长,开三个队列,分别放原先的长度,切掉后大的那一半,切掉后小的那一半. ...
- 洛谷 P2827 蚯蚓 解题报告
P2827 蚯蚓 题目描述 本题中,我们将用符号 \(\lfloor c \rfloor\) 表示对 \(c\) 向下取整,例如:\(\lfloor 3.0 \rfloor = \lfloor 3.1 ...
- 洛谷P2827 蚯蚓 题解
洛谷P2827 蚯蚓 题解 题目描述 本题中,我们将用符号 ⌊c⌋ 表示对 c 向下取整. 蛐蛐国最近蚯蚓成灾了!隔壁跳蚤国的跳蚤也拿蚯蚓们没办法,蛐蛐国王只好去请神刀手来帮他们消灭蚯蚓. 蛐蛐国里现 ...
- 洛谷——P2827 蚯蚓
P2827 蚯蚓 题目描述 本题中,我们将用符号 \lfloor c \rfloor⌊c⌋ 表示对 cc 向下取整,例如:\lfloor 3.0 \rfloor = \lfloor 3.1 \rflo ...
- 洛谷p2827蚯蚓题解
题目 算法标签里的算法什么的都不会啊 什么二叉堆?? qbxt出去学习的时候讲的,一段时间之前做的,现在才写到博客上的 维护3个队列,队列1表示最开始的蚯蚓,队列2表示每一次被切的蚯蚓被分开的较长的那 ...
随机推荐
- 指定ip地址登陆服务器
[root@localhost ~]# cat /etc/hosts.allow ## hosts.allow This file contains access rules which are ...
- (九)maven之聚合多模块
聚合项目 一些开源项目,都会把自己的源代码公开到github之类的网站上,我们通过下载其代码,在本地执行maven install,可以把代码编译成jar包安装到本地仓库.而一个项目通常有多个模块,比 ...
- (一)maven之创建一个maven项目
为什么要使用Maven? 1. maven使用的是本地仓库存储jar,所有项目都会共用仓库中的同一份jar. 2. Spring core.jar必须同时引用版本兼容的common-logging ...
- asp.net mvc集成log4net
第一步:在web项目的引用中添加log4net.dll,可以通过Nuget直接下载并安装: 第二步:在web项目的web.config配置文件的configuration节点内添加log4net节点, ...
- URAL 2047 Maths (数学)
对于一个数来说,它的除数是确定的,那么它的前驱也是确定的,而起点只能是1或2,所以只要类似筛法先预处理出每个数的除数个数 ,然后递推出每个数往前的延伸的链长,更新最大长度,记录对应数字.找到maxn以 ...
- faster rcnn需要理解的地方
http://blog.csdn.net/terrenceyuu/article/details/76228317 https://www.cnblogs.com/houkai/p/6824455.h ...
- js获取当前时间的前一天/后一天
Date curDate = new Date();var preDate = new Date(curDate.getTime() - 24*60*60*1000); //前一天var nextDa ...
- tomcat假死现象 - 二
1 编写背景 最近服务器发现tomcat的应用会偶尔出现无法访问的情况.经过一段时间的观察最近又发现有台tomcat的应用出现了无法访问情况.简单描述下该台tomcat当时具体的表现:客户端请求没有响 ...
- 安装ruby开发环境
如何快速正确的安装 Ruby, Rails 运行环境 对于新入门的开发者,如何安装 Ruby, Ruby Gems 和 Rails 的运行环境可能会是个问题,本页主要介绍如何用一条靠谱的路子快速安装 ...
- Bzoj3170: [Tjoi2013]松鼠聚会 (切比雪夫距离)
题目链接 显然,题目要求我们求切比雪夫距离,不会的可以去看一下attack的博客. 考虑枚举所有的点 转换为曼哈顿距离后. 那么对于这个点的路程和是. \[\sum_{i=1}^n | x_i - x ...