P2827-蚯蚓【队列】
前言
早年一直拿堆过不了,结果发现要用队列
正题
题目链接:https://www.luogu.com.cn/problem/P2827
题目大意
有nnn条蚯蚓,每次选取最长的一条,切成⌊x∗p⌋\lfloor x*p\rfloor⌊x∗p⌋和x−⌊x∗p⌋x-\lfloor x*p\rfloorx−⌊x∗p⌋的两段,然后其余蚯蚓变长qqq。
求每次切开蚯蚓的长度和最后所以蚯蚓的长度。
解题思路
先不考虑变长
和合并果子的思路很像,我们发现如果从大到小切切出来的也是从大到小的,所以我们开三个队列,第一个队列装初始的蚯蚓,然后切出来的左边装到第二个队列,右边装到第三个队列,这样每个队列的长度也是单调的,之后每次取出三个队头里最长的来剪掉就好了。
考虑变长,初始的蚯蚓第iii次长度为x+i∗qx+i*qx+i∗q,那么我们直接当做所有长度都是x+i∗qx+i*qx+i∗q的蚯蚓,然后将第iii次加入的蚯蚓长度变为x−i∗qx-i*qx−i∗q即可。
时间复杂度O(n+m)O(n+m)O(n+m)
codecodecode
#include<cstdio>
#include<cstring>
#include<algorithm>
#define ll long long
using namespace std;
const ll N=7e6+10;
ll n,m,q,u,v,t,a[N],q1[N*2],q2[N*2],q3[N*2];
int main()
{scanf("%lld%lld%lld%lld%lld%lld",&n,&m,&q,&u,&v,&t);for(ll i=1;i<=n;i++)scanf("%lld",&a[i]);sort(a+1,a+1+n);memset(q1,-127,sizeof(q1));memset(q2,-127,sizeof(q2));memset(q3,-127,sizeof(q3));ll h1,h2,h3,t1,t2,t3;h1=h2=h3=1;t1=t2=t3=0;for(ll i=n;i>=1;i--)q1[++t1]=a[i];for(ll i=1;i<=m;i++){ll l,r,x;if(q1[h1]>=q2[h2]&&q1[h1]>=q3[h3])x=q1[h1++];else if(q2[h2]>=q1[h1]&&q2[h2]>=q3[h3])x=q2[h2++];else x=q3[h3++];x+=(i-1)*q;l=x*u/v;r=x-l;q2[++t2]=l-q*i;q3[++t3]=r-q*i;if(i%t==0) printf("%lld ",x);}printf("\n");for(ll i=1;i<=m+n;i++){ll x;if(q1[h1]>=q2[h2]&&q1[h1]>=q3[h3])x=q1[h1++];else if(q2[h2]>=q1[h1]&&q2[h2]>=q3[h3])x=q2[h2++];else x=q3[h3++];if(i%t==0)printf("%lld ",x+m*q);}
}
附上远古时期堆的代码
90ptscode90pts\ code90pts code
#include<cstdio>
#include<algorithm>
#define N 100010
#define M 7000010
using namespace std;
int n,a[N+M],num,m,q,t,addl,u,v;
double p;
void up(int x)
{while(x>1&&a[x>>1]<a[x]){swap(a[x],a[x>>1]);x>>=1;}
}
void down(int x)
{int y;while((x<<1)<=num&&a[x<<1]>a[x]||((x<<1)|1)<=num&&a[(x<<1)|1]>a[x]){y=x<<1;if(a[y]<a[y|1]&&((x<<1)|1)<=num) y|=1;swap(a[x],a[y]);x=y;}
}
int main()
{scanf("%d%d%d%d%d%d",&n,&m,&q,&u,&v,&t);p=(double)u/v;for(int i=1;i<=n;i++){scanf("%d",&a[i]);num++;up(num);}int k=1;for (int i=1;i<=m;i++){int k1,k2;a[1]=a[1]+addl;k1=(double)a[1]*p;k2=a[1]-k1;if(k==t){printf("%d ",a[1]);k=0;}a[1]=k1-addl-q;down(1);a[++num]=k2-addl-q;k++;up(num);addl+=q;}k=1;printf("\n");while(num){if(k==t) printf("%d ",a[1]+addl),k=0;swap(a[1],a[num]);num--;k++;down(1);}
}
P2827-蚯蚓【队列】相关推荐
- 【NOIP2016】蚯蚓 --队列模拟
[NOIP2016]蚯蚓 话说去年这个题 我用priority_queue乱搞 结果惨不忍睹 q=0时送了50分 结果~~~~(>_<)~~~~ 每次弹出最长的蚯蚓 把它切开 在放回队列 ...
- LUOGU P2827 蚯蚓 (noip 2016)
传送门 解题思路 第一眼以为是一个二叉堆,直接上优先队列60分...后来听ztz11说有单调性,新加入的蚯蚓一定比原先在的蚯蚓长度长,开三个队列,分别放原先的长度,切掉后大的那一半,切掉后小的那一半. ...
- Luogu P2827 蚯蚓
看到题目就可以想到直接开的堆模拟的过程了吧,这个还是很naive的 注意在用堆做的时候也是要明智一点的,对于蚯蚓长度的相加肯定不能直接遍历并加上,还是可以差分一下的 其实说白了就是把集体加->单 ...
- Noip2016day2
P2822 组合数问题 题目描述 组合数 C_n^mCnm 表示的是从 nn 个物品中选出 mm 个物品的方案数.举个例子,从 (1,2,3)(1,2,3) 三个物品中选择两个物品可以有 (1,2) ...
- NOIP前的刷题记录
因为这几天要加油,懒得每篇都来写题解了,就这里记录一下加上一句话题解好了 P4071 [SDOI2016]排列计数 组合数+错排 loj 6217 扑克牌 暴力背包 P2511 [HAOI2008 ...
- 近期刷题总结 [19 03 17]
目录 P3703 [SDOI2017]树点涂色 [LCT + 线段树] CF739B Alyona and a tree [主席树] P4098 [HEOI2013]ALO [双向链表 + 可持久化0 ...
- NOIP2016-D2-T2 蚯蚓(单调队列)
构建三个单调队列(用STL),分别储存未切的蚯蚓,切后的第一段,切后的第二段,即可简单证明其单调性. 证明: 设$q$为单调队列 $\because a_1 \geqslant a_2 \geqsla ...
- 0x12.基本数据结构 — 队列与单调队列
目录 一.队列 0.UVA540 团体队列 Team Queue 1.AcWing 133. 蚯蚓(模拟优先队列) 二 .单调队列 0.AcWing 135. 最大子序和(单调队列) 1.luogu ...
- 杂题 NOIP2016蚯蚓
本题中,我们将用符号 c⌊c⌋ 表示对 cc 向下取整,例如: 3.03.13.93⌊3.0⌋=⌊3.1⌋=⌊3.9⌋=3 . 蛐蛐国最近蚯蚓成灾了!隔壁跳蚤国的跳蚤也拿蚯蚓们没办法,蛐蛐国王只好去请 ...
最新文章
- centos 5.4 x64 安装nagios 3.2.3
- LongAdder分段锁机制
- 电脑运行adb闪退_adb+python进阶使用
- resopnse处理HTTP文件头
- 远程登录阿里云上的MySQL
- 告别后端!阿里云小程序 Serverless 教你如何 30 分钟开发小程序!
- 关于WEB ServiceWCFWebApi实现身份验证之WEB Service篇
- 张孝祥JavaScript视频教程flash版
- 跨平台开发实践之Flutter
- 开发版速达扩展功能-提供便捷的界面布局功能
- MediaRecorder录制音频文件
- 边缘计算在物联网领域的发展前景
- 「99诱拐」 读后感
- 学习编程时真正值得一读的一篇文章 与 书籍
- 超好看的导航页面(静态页面)
- 通过朋友网信息查找QQ号~
- 唉!一 28 岁程序员因新冠离世。。。
- Interger和Int的区别
- 罗技方向盘SDK开发笔记
- oracle使用sysdba连接报错 ORA-01031: insufficient privileges
热门文章
- 如何发送html email,如何发送HTML电子邮件?
- js堆和栈的区别_几个例子理解不同数据类型的堆栈内存处理
- 计算机数控是什么专业,数控是什么专业
- c语言求平衡因子,平衡二叉树(AVL树)的基本操作
- phpstormp新建PHP保存在哪里_记一次windows配置PHP环境
- java父类转子类_java中什么是继承,和继承的接口的关系?
- dbscan用 java代码_聚类算法之DBScan(Java实现)[转]
- leetcode222. 完全二叉树的节点个数(两种做法)
- 7-7 有重复元素的全排列 (10 分)(set容器做法思路加详解)
- 高等数学下-赵立军-北京大学出版社-题解-练习9.1