洛谷P2827 蚯蚓——思路题
题目:https://www.luogu.org/problemnew/show/P2827
思路...
用优先队列模拟做的话,时间主要消耗在每次的排序上;
能不能不要每次排序呢?
关注先后被砍的两条蚯蚓 x 和 y,发现砍完以后,它们的两部分对应还满足原来的大小关系!
从两条蚯蚓出发,可以推知所有蚯蚓砍完以后的两部分还对应满足原来的大小关系;
但两部分之间就不一定了;
所以开三个队列,分别记录原来的蚯蚓,砍后第一部分的蚯蚓,砍后第二部分的蚯蚓;
每次取三个队列中最长的蚯蚓砍,砍出来的两部分对应加到砍后的两个队列里;
即使是又砍了已经被砍过的蚯蚓,把它类比成原来的蚯蚓,也满足刚才的那种做法;
于是这题就A了;
有不少细节呢,而且注意要开 long long !以后应该对这些敏感一点;
由这题得到的经验是,遇到关于询问大小关系,没有规律,需要不断排序的问题的时候,关注相邻的两个量的变化关系,也许能有意想不到的发现。
代码如下:
#include<iostream>
#include<cstdio>
#include<cstring>
#include<queue>
#include<algorithm>
#include<cmath>
using namespace std;
typedef long long ll;
queue<pair<ll,int> >q1,q2,q3;
priority_queue<int>ans;
int const maxn=1e5+;
int n,m,q,u,v,t,a[maxn];
int main()
{
scanf("%d%d%d%d%d%d",&n,&m,&q,&u,&v,&t);
for(int i=;i<=n;i++)scanf("%d",&a[i]);
sort(a+,a+n+);
for(int i=n;i;i--)q1.push(make_pair(a[i],));//
ll x,x1,x2,x3;
for(int i=;i<=m;i++)
{
x1=; x2=; x3=;
if(q1.size()) x1=q1.front().first+q*(i-q1.front().second);
if(q2.size()) x2=q2.front().first+q*(i-q2.front().second);
if(q3.size()) x3=q3.front().first+q*(i-q3.front().second);
if(q1.size() && (!q2.size()||x1>=x2) && (!q3.size()||x1>=x3)) x=x1,q1.pop();//=
else if(q2.size() && (!q1.size()||x2>=x1) && (!q3.size()||x2>=x3)) x=x2,q2.pop();//else
else if(q3.size() && (!q1.size()||x3>=x1) && (!q2.size()||x3>=x2)) x=x3,q3.pop(); if(i%t==)printf("%lld ",x);
q2.push(make_pair(x*u/v,i+)); q3.push(make_pair(x-x*u/v,i+));//i+1
}
printf("\n");
for(int i=;i<=n+m;i++)
{
x1=; x2=; x3=;
if(q1.size()) x1=q1.front().first+q*(m+-q1.front().second);
if(q2.size()) x2=q2.front().first+q*(m+-q2.front().second);
if(q3.size()) x3=q3.front().first+q*(m+-q3.front().second);
if(q1.size() && (!q2.size()||x1>=x2) && (!q3.size()||x1>=x3)) x=x1,q1.pop();
else if(q2.size() && (!q1.size()||x2>=x1) && (!q3.size()||x2>=x3)) x=x2,q2.pop();
else if(q3.size() && (!q1.size()||x3>=x1) && (!q2.size()||x3>=x2)) x=x3,q3.pop(); if(i%t==)printf("%lld ",x);
}
return ;
}
洛谷P2827 蚯蚓——思路题的更多相关文章
- 洛谷P2827 蚯蚓 题解
洛谷P2827 蚯蚓 题解 题目描述 本题中,我们将用符号 ⌊c⌋ 表示对 c 向下取整. 蛐蛐国最近蚯蚓成灾了!隔壁跳蚤国的跳蚤也拿蚯蚓们没办法,蛐蛐国王只好去请神刀手来帮他们消灭蚯蚓. 蛐蛐国里现 ...
- 洛谷 P2827 蚯蚓 解题报告
P2827 蚯蚓 题目描述 本题中,我们将用符号 \(\lfloor c \rfloor\) 表示对 \(c\) 向下取整,例如:\(\lfloor 3.0 \rfloor = \lfloor 3.1 ...
- NOIP 2016 洛谷 P2827 蚯蚓 题解
题目传送门 展开 题目描述 本题中,我们将用符号[c]表示对c向下取整,例如:[3.0」= [3.1」=[3.9」=3.蛐蛐国最近蚯蚓成灾了!隔壁跳 蚤国的跳蚤也拿蚯蚓们没办法,蛐蛐国王只好去请神刀手 ...
- 洛谷——P2827 蚯蚓
P2827 蚯蚓 题目描述 本题中,我们将用符号 \lfloor c \rfloor⌊c⌋ 表示对 cc 向下取整,例如:\lfloor 3.0 \rfloor = \lfloor 3.1 \rflo ...
- 洛谷P2827蚯蚓
题目 堆+模拟,还有一个小优化(优化后跟堆关系不大,而是类似于贪心). 如果不加优化的话,卡常可以卡到85. 思路是对于对每一秒进行模拟,用堆来维护动态的最大值,然后对于每个长度都加q的情况可以用一个 ...
- 洛谷P2827 蚯蚓(单调队列)
题意 初始时有$n$个蚯蚓,每个长度为$a[i]$ 有$m$个时间,每个时间点找出长度最大的蚯蚓,把它切成两段,分别为$a[i] * p$和$a[i] - a[i] * p$,除这两段外其他的长度都加 ...
- 洛谷 P2827 蚯蚓 题解
每日一题 day32 打卡 Analysis 我们可以想一下,对于每一秒除了被切的哪一个所有的蚯蚓都增长Q米,我们来维护3个队列,队列1表示最开始的蚯蚓,队列2表示每一次被切的蚯蚓被分开的较长的那一部 ...
- 洛谷 P2827 蚯蚓
题目描述 本题中,我们将用符号\lfloor c \rfloor⌊c⌋表示对c向下取整,例如:\lfloor 3.0 \rfloor= \lfloor 3.1 \rfloor=\lfloor 3.9 ...
- 洛谷p2827蚯蚓题解
题目 算法标签里的算法什么的都不会啊 什么二叉堆?? qbxt出去学习的时候讲的,一段时间之前做的,现在才写到博客上的 维护3个队列,队列1表示最开始的蚯蚓,队列2表示每一次被切的蚯蚓被分开的较长的那 ...
随机推荐
- 树莓派 -- 输入设备驱动 (key) 续1
测试 安装 input-utils pi@raspberrypi:~ $ sudo apt-get install input-utils Reading package lists... Done ...
- 深入React技术栈之setState详解
抛出问题 class Example extends Component { contructor () { super() this.state = { value: 0, index: 0 } } ...
- 编译时报错,找不到指定路径下的command,而路径是正确的。
使用的Fedora 18 64位的系统kernel,内核为3.6.10.按照要求使用yum install *** 安装各项工具. path路径使用提供的toolchain,各种路径也安装正确,却发现 ...
- 前端跳转处理--房天下的访问页面部分ip自动跳转到登录页面的解决办法(xjl456852原创)
朋友说自己在访问房天下的页面时,他们页面进行了跳转,跳转到登录页面,说是前端跳转.让我也看看,我看我的机器没有进行跳转. 后来就发现有的机器在访问页面会自动跳转到登录页面.有的不会进行跳转. 比如访问 ...
- java连接mysql数据库中文乱码问题
private static final String URL="jdbc:mysql://localhost:3306/ziye?useUnicode=true&character ...
- IDA-IDC脚本编写语法
1.IDA脚本编写基础 IDC是IDA内置的脚本语言,其语法与C非常相似,它是一种解释性语言. 执行方法 在IDA中按SHIFT+F2键会弹出一个对话框,把语句直接写在对话框中,点击run就可被运行. ...
- 【KMP+最小循环节】F. Cyclic Nacklace
https://www.bnuoj.com/v3/contest_show.php?cid=9147#problem/F [题意] 给定一个字符串,问在字符串后最少添加多少个字母,得到的新字符串能是前 ...
- 洛谷 P3137 [USACO16FEB]圆形谷仓Circular Barn_Silver
P3137 [USACO16FEB]圆形谷仓Circular Barn_Silver 题目描述 Being a fan of contemporary architecture, Farmer Joh ...
- tomcat8.5.20配置https
一.使用cmd下生成证书: d: cd d:/java/jdk/jdk1.8 keytool -v -genkey -alias tomcat -keyalg RSA -keystore D:\jav ...
- Serv-u 10.3 的图文安装教程及使用方法
现在很多windows服务器都是使用serv_u作为ftp服务器,一般情况下我们使用Serv-U FTP Server v6.4.0.6,这里以serv_u 10.3为例介绍下,方便需要的朋友 一 ...