原来真的是按题意模拟啊,还以为有高能的算法可以直接算每个$t$的值。

考虑到先切的蚯蚓一定比后切的蚯蚓长,于是可以弄三个队列分别存放原来的序列和两个切开后的序列,每次取出三个队头的最大值进行扩展。

考虑到每秒钟除了取出来的队头其他的长度都会增加$q$,那么我们可以写一个全局变量$tag$标记现在进行了几轮,然后每一次进队的时候反向减去这一个$tag$就好了。

时间复杂度$O(nlogn)$。

$stl$的$queue$开了$O2$之后就很快了

Code:

  1. #include <cstdio>
  2. #include <cstring>
  3. #include <queue>
  4. #include <algorithm>
  5. using namespace std;
  6. typedef double db;
  7.  
  8. const int N = 7e6 + ;
  9. const int inf = << ;
  10.  
  11. int n, m, q, t, a[N * ];
  12. db p;
  13. queue <int> Q[];
  14.  
  15. inline void read(int &X) {
  16. X = ;
  17. char ch = ;
  18. int op = ;
  19. for(; ch > ''|| ch < ''; ch = getchar())
  20. if(ch == '-') op = -;
  21. for(; ch >= '' && ch <= ''; ch = getchar())
  22. X = (X << ) + (X << ) + ch - ;
  23. X *= op;
  24. }
  25.  
  26. bool cmp(const int x, const int y) {
  27. return x > y;
  28. }
  29.  
  30. inline int bet(int x, int y, int rx, int ry) {
  31. return rx > ry ? x : y;
  32. }
  33.  
  34. inline int getQ(int now) {
  35. if(Q[now].empty()) return -inf;
  36. else return Q[now].front();
  37. }
  38.  
  39. inline int getMax() {
  40. int res[];
  41. for(int i = ; i < ; i++) res[i] = getQ(i);
  42. return bet(bet(, , res[], res[]), , res[bet(, , res[], res[])], res[]);
  43. }
  44.  
  45. int main() {
  46. int u, v;
  47. read(n), read(m), read(q), read(u), read(v), read(t);
  48. p = (db)u / v;
  49.  
  50. for(int i = ; i <= n; i++) read(a[i]);
  51.  
  52. sort(a + , a + + n, cmp);
  53. for(int i = ; i <= n; i++) Q[].push(a[i]);
  54.  
  55. int tag = ;
  56. for(int i = ; i <= m; i++) {
  57. int now = getMax();
  58. int z = Q[now].front() + tag;
  59. Q[now].pop();
  60. if(i % t == ) printf("%d ", z);
  61. int x = (int)z * p, y = z - x;
  62. tag += q;
  63. x -= tag, y -= tag;
  64. Q[].push(x), Q[].push(y);
  65. }
  66. printf("\n");
  67.  
  68. int len = ;
  69. for(int i = ; i < ; i++)
  70. for(;!Q[i].empty(); Q[i].pop())
  71. a[++len] = Q[i].front();
  72. sort(a + , a + + len, cmp);
  73.  
  74. /* for(int i = 1; i <= len; i++)
  75. printf("%d ", a[i]);
  76. printf("\n"); */
  77.  
  78. int cnt = (n + m) / t;
  79. for(int i = ; i <= cnt; i++)
  80. printf("%d ", a[i * t] + tag);
  81. printf("\n");
  82.  
  83. return ;
  84. }

Luogu 2827 [NOIP2016] 蚯蚓的更多相关文章

  1. [Noip2016]蚯蚓 D2 T2 队列

    [Noip2016]蚯蚓 D2 T2 Description 本题中,我们将用符号[c]表示对c向下取整,例如:[3.0」= [3.1」=[3.9」=3.蛐蛐国最近蚯蚓成灾了!隔壁跳 蚤国的跳蚤也拿蚯 ...

  2. 【BZOJ】4721: [Noip2016]蚯蚓 / 【洛谷】P2827 蚯蚓(单调队列)

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

  3. NC16430 [NOIP2016]蚯蚓

    NC16430 [NOIP2016]蚯蚓 题目 题目描述 本题中,我们将用符号 \(\lfloor c \rfloor\) 表示对 c 向下取整,例如:\(\lfloor 3.0 \rfloor = ...

  4. NOIP 2016 蚯蚓 (luogu 2827 & uoj 264) - 鬼畜的优化

    题目描述 本题中,我们将用符号\lfloor c \rfloor⌊c⌋表示对c向下取整,例如:\lfloor 3.0 \rfloor= \lfloor 3.1 \rfloor=\lfloor 3.9 ...

  5. luogu 2827 蚯蚓 单调队列/优先队列

    易知可利用优先队列选取最大值: 但是通过分析可知,先取出的蚯蚓分开后仍然要比后分的长,所以可直接利用单调队列找队头即可,分三个单调队列,分别找未切割,切割,切割2三种情况 #include<bi ...

  6. Luogu P2827 [NOIp2016提高组]蚯蚓 | 神奇的队列

    题目链接 80分思路: 弄一个优先队列,不停地模拟,切蚯蚓时就将最长的那一条出队,然后一分为二入队,简单模拟即可.还要弄一个标记,表示从开始到当前时间每一条蚯蚓应该加上的长度,操作时就加上,入队时就减 ...

  7. [noip2016]蚯蚓<单调队列+模拟>

    题目链接:https://vijos.org/p/2007 题目链接:https://www.luogu.org/problem/show?pid=2827#sub 说实话当两个网站给出AC后,我很感 ...

  8. 【bzoj4721】[Noip2016]蚯蚓

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

  9. 【uoj264】 NOIP2016—蚯蚓

    http://uoj.ac/problem/264 (题目链接) 题意 n条蚯蚓,时间为m.每单位时间要可以将最长的蚯蚓切成len/2和len-len/2两份,长度为0的蚯蚓不会消失,因为每单位时间所 ...

随机推荐

  1. BEC listen and translation exercise 9

    You will do foolish things, but do them with enthusiasm. 你难免会做傻事,但要做,就做得满怀激情. In addition, there sho ...

  2. github提交代码时遇到”Everything up-to-date“问题的解决方式

    需要创建一个新分支,将最新代码加入新分支, 再将新分支合并到主分支,然后提交主分支代码到github网站. ---------------------------------------------- ...

  3. 安装Aptana时检测不到已经安装的Nodejs

    1.环境前提 已经安装了Git和Nodejs,在安装Aptana时任然提示如下错误: Failed to correctly acquire installer_nodejs_windows.msi ...

  4. vs2012 sln和.vcxproj有什么区别

    sln是解决方案的配置,主要是管理这个方案里的多个vcxprojvcxproj是工程的配置文件,管理工程中细节比如包含的文件,引用库等一般没有sln,也可以直接打开vcxproj,也可以重新生成sln ...

  5. Python 3.5 socket OSError: [Errno 101] Network is unreachable

    /******************************************************************************** * Python 3.5 socke ...

  6. 2017 年比较 Angular、React、Vue 三剑客(转载)

    为 web 应用选择 JavaScript 开发框架是一件很费脑筋的事.现如今 Angular 和 React 非常流行,并且最近出现的新贵 VueJS 同样博得了很多人的关注.更重要的是,这只是一些 ...

  7. Linux之时间、地点、人物、事件、情节

    时间 date 显示当前时间 time cmd 显示 cmd的运行时间 地点 locate 根据文件名,迅速找到文件.基于系统构建的索引 find 根据各种规则找到文件,更强大,但比较慢 wherei ...

  8. NuGet学习笔记(2)——vs2015搭建本地NuGet服务器

    搭建本地服务器特别简单,新建一个web空项目,按照下图所示搜索安装即可,之后设置hosts 将www.mynuget.com执向本机 运行里面输入c:\windows\system32\drivers ...

  9. 用phpinfo( )打印出来的php版本和在服务器上用php -v打印出来的版本不同的原因

    php -v 是linux系统的php版本,而phpinfo里显示的是WEB Server中配置的版本.说简单点,你的系统中有两个php版本. 如果您阅读过此文章有所收获,请为我顶一个,如果文章中有错 ...

  10. 蓝桥杯 算法训练 ALGO-122 未名湖边的烦恼

    算法训练 未名湖边的烦恼   时间限制:1.0s   内存限制:256.0MB 问题描述 每年冬天,北大未名湖上都是滑冰的好地方.北大体育组准备了许多冰鞋,可是人太多了,每天下午收工后,常常一双冰鞋都 ...