传送门

解题思路

第一眼以为是一个二叉堆,直接上优先队列60分。。。后来听ztz11说有单调性,新加入的蚯蚓一定比原先在的蚯蚓长度长,开三个队列,分别放原先的长度,切掉后大的那一半,切掉后小的那一半。假设原先的第一个数为x1,第二个数为x2,x1>x2,那么取出x1后大的那一半记做x1*p(假设p>1/2) ,第二个数此时加q,第二次再将第二个数拿出来,大的那一半就是(x2+q)*p=x2*p+q*p,而原先第一个数大的那一半变成了x1*p+q,因为x1>x2,p<0,所以符合单调性。所以只需要每次取出最大的切,然后分成两半分别放入第二个与第三个队列。

代码

#include<iostream>
#include<cstdio>
#include<cstring>
#include<algorithm>
#include<queue>typedef long long LL;
using namespace std;
const int MAXN = 1e5+5;
const LL inf = 1e18+5;
const int MAXM = 7e6+5;inline int rd(){int x=0,f=1;char ch=getchar();while(!isdigit(ch)) {if(ch=='-') f=-1;ch=getchar();}while(isdigit(ch))  {x=(x<<1)+(x<<3)+ch-'0';ch=getchar();}return x*f;
}int n,m,q,u,v,t;
LL ans[MAXM],a[MAXN];
queue<LL> Q[4];inline bool cmp(int x,int y){return x>y;
}int main(){
//  freopen("rand.txt","r",stdin);
//  freopen("A.txt","w",stdout);n=rd();m=rd();q=rd();u=rd();v=rd();t=rd();for(register int i=1;i<=n;i++) a[i]=rd();sort(a+1,a+1+n,cmp);for(register int i=1;i<=n;i++) Q[1].push(a[i]);for(register int i=1;i<=m;i++){LL x=-inf,y=-inf,z=-inf;if(Q[1].size()) x=Q[1].front();if(Q[2].size()) y=Q[2].front();if(Q[3].size()) z=Q[3].front(); LL mx=x;int r=1;if(y>mx) mx=y,r=2;if(z>mx) mx=z,r=3;Q[r].pop();mx+=(LL)(i-1)*q;ans[i]=mx;LL now=mx;mx=mx*u/v;now=now-mx;Q[2].push(max(now,mx)-(LL)i*q);Q[3].push(min(now,mx)-(LL)i*q);}for(register int i=t;i<=m;i+=t) printf("%lld ",ans[i]);puts("");int yy=1;for(register int i=1;i<=n+m;i++){LL x=-inf,y=-inf,z=-inf;if(Q[1].size()) x=Q[1].front();if(Q[2].size()) y=Q[2].front();if(Q[3].size()) z=Q[3].front();     LL mx=x;int r=1;if(y>mx) mx=y,r=2;if(z>mx) mx=z,r=3;Q[r].pop();
//      cout<<mx+(LL)q*m<<" ";if(yy<t) {yy++;continue;}yy=1;printf("%lld ",mx+(LL)m*q);}return 0;
}

转载于:https://www.cnblogs.com/sdfzsyq/p/9676922.html

LUOGU P2827 蚯蚓 (noip 2016)相关推荐

  1. Luogu P2827 蚯蚓

    看到题目就可以想到直接开的堆模拟的过程了吧,这个还是很naive的 注意在用堆做的时候也是要明智一点的,对于蚯蚓长度的相加肯定不能直接遍历并加上,还是可以差分一下的 其实说白了就是把集体加->单 ...

  2. NOIP 2016 迟来的满贯

    17-03-22,雨 17-03-22,一个特别重要的日子 在这一天,本蒻攻克了NOIP 2016最难的一题,D1T2--天天爱跑步 实现了NOIP 2016的AK! YAYAYAYAYAYAY 自然 ...

  3. NOIP 2016 Day1 T3-换教室

    NOIP 2016 Day1 T3-换教室 题意 思路 代码 题目链接:换教室 题意 \;\;\;\; 有 nnn 节要上.每节课有两个教室同时在上,教室为 ci,dic_{i},d_{i}ci​,d ...

  4. NOIP 2016 提高组 初赛

    NOIP 2016 提高组 初赛 疑难点 学习 感悟. 一. 2.该题81容易看成81次按键,实际是屏幕上出现的第81个字符,实际按键次数超过81次. 3.异或,相同位上,数字相同取0,数字不同取1, ...

  5. NOIP 2016【蚯蚓】

    好吧,我承认我是个智障-- 这道题一眼看上去就是个堆,然而实际上有单调性. 注意到,如果 \(q = 0\) 的话,将蚯蚓的左右两边分开丢进两个队列中,则两个队列都是单调不增的,因为每次取出的蚯蚓长度 ...

  6. 【noip 2016】 蚯蚓(earthworm)

    100分程序,写了2天+1小时 →题目在这里← 大神就是厉害--写的程序居然看都看不懂,还有就是cena上过了但是luogu上一直是恶心的TLE 首先是考虑p=0时,数组大小开到了1100000,然后 ...

  7. 【NOIP 2016 提高组】蚯蚓

    Description Solution 这题算是一道结论题, 先来想一下,当q=0时,很显然有结论: 1. 对于所有没有被切过的蚯蚓,一定是越切越短. 2. 对于被切开的两段,随着时间的增加,新切的 ...

  8. NOIP 2016 蚯蚓 题解

    题目传送门(洛谷) 题目大意:有n条蚯蚓,每次把最长的切成两半,长度分别为⌊px⌋和x-⌊px⌋,其他的蚯蚓长度加q,重复m次,问某些时候切的蚯蚓的长度和最后的一些蚯蚓的长度. 十分显然的,这道题我们 ...

  9. Noip 2016 愤怒的小鸟 题解

    [NOIP2016]愤怒的小鸟 时间限制:1 s   内存限制:256 MB [题目描述] Kiana最近沉迷于一款神奇的游戏无法自拔. 简单来说,这款游戏是在一个平面上进行的. 有一架弹弓位于(0, ...

最新文章

  1. 三层交换机不能完全取代路由的作用
  2. WebAPi的可视化输出模式(RabbitMQ、消息补偿相关)——所有webapi似乎都缺失的一个功能...
  3. cocos label html文本,【cocos2dx】创建简单的文字Label——BMFont
  4. 华为上机试题:最高分是多少
  5. 静态函数调用非静态函数的小例子
  6. Rabbitmq集群高可用部署详细
  7. 提前祝大家十一中秋节快乐
  8. junit:junit_简而言之,JUnit:测试隔离
  9. 用户态与内核态 文件流与文件描述符 简介【转】
  10. JavaScript 错误 - Throw、Try 和 Catch
  11. FE File Explorer Pro for mac(文件管理器)3.1.1
  12. matlab人工神经网络教程,人工神经网络作业MATLAB仿真(共3篇)
  13. C#中的ASCII转换
  14. 相机内参,外参的物理意义
  15. 解决html5直播延迟大问题,SRS 直播系统使用中发现延迟过大
  16. 股神巴菲特名言及股神巴菲特选股技巧有哪些
  17. [转载]三十四个有趣的小故事
  18. Java时间戳是什么
  19. 保定学院数学与计算机系2016,保定学院数学与计算机系
  20. created和mounted的区别

热门文章

  1. 51nod 1402 最大值 3级算法题 排序后修改限制点 时间复杂度O(m^2)
  2. 整数反转—leetcode7
  3. ACCESS在哪输入SQL语句
  4. FatFsVersion0.01源码分析
  5. Linux C中内联汇编的语法格式及使用方法
  6. CF-1238E. Keyboard Purchase (状压dp)
  7. std::future和std::promise和std::packaged_task
  8. 使用Letax引用文献一直报错: LaTeX Error: Something‘s wrong--perhaps a missing \item
  9. 源码注释TODO/ FIXME/XXX,
  10. 3.5 softmat从零开始_实现