【NOIP2016提高组复赛】蚯蚓

Description

Input

Ouput

Sample Input

Sample Input1:
3 7 1 1 3 1
3 3 2

Sample Input2:
3 7 1 1 3 2
3 3 2

Sample Input3:
3 7 1 1 3 9
3 3 2

Sample Output

Sample Output1:
3 4 4 4 5 5 6
6 6 6 5 5 4 4 3 2 2

Sample Output2:
4 4 5
6 5 4 3 2

Sample Output3
2

分析

这题我模拟赛的时候是用了线段树调了2h之后拿了暴力分……(我太弱了)
不过好像用堆可以拿到80分的好成绩,所以如果想不到正解在考场上80分也是很可观的得分了(线段树80应该也没问题,but我……)
正解非常的巧妙:
首先我们对于两条蚯蚓:x1x1x1和x2x2x2,且x1>x2x1>x2x1>x2,那么x1x1x1肯定比x2x2x2先被砍断(可怜的蚯蚓~~)
设x1x1x1被砍断成两只蚯蚓a1a1a1和b1b1b1长度分别为a1=⌊p∗x1⌋a1=⌊p*x1⌋a1=⌊p∗x1⌋,b1=x1−⌊p∗x1⌋b1=x1-⌊p*x1⌋b1=x1−⌊p∗x1⌋
设x2x2x2被砍断成两只蚯蚓a2a2a2和b2b2b2长度分别为a2=⌊p∗x2⌋a2=⌊p*x2⌋a2=⌊p∗x2⌋,b2=x2−⌊p∗x2⌋b2=x2-⌊p*x2⌋b2=x2−⌊p∗x2⌋
之后显然a1>a2a1>a2a1>a2,b1>b2b1>b2b1>b2,也就是说a1、b1a1、b1a1、b1一定会在a2、b2a2、b2a2、b2砍断之前被砍断,如果还有同学看不懂“显然”得我就来简单证明一下:
假设
砍断x1x1x1之后过了ttt秒后砍断x2x2x2,
则a1=⌊p∗x1⌋+t∗qa1=⌊p*x1⌋+t∗qa1=⌊p∗x1⌋+t∗q,b2=x1−⌊p∗x1⌋+t∗qb2=x1−⌊p*x1⌋+t∗qb2=x1−⌊p∗x1⌋+t∗q,x2=x2+t∗qx2=x2+t∗qx2=x2+t∗q,
当砍断x2x2x2之后,a2=⌊p(x2+t∗q)⌋a2=⌊p(x2+t*q)⌋a2=⌊p(x2+t∗q)⌋,b2=x2+t∗q−⌊p(x2+t∗q)⌋b2=x2+t∗q−⌊p(x2+t∗q)⌋b2=x2+t∗q−⌊p(x2+t∗q)⌋,
然后比较a1a1a1和a2a2a2的大小关系,当我们忽略下取整时,
a1−a2=p(x1−x2)+q∗(t−t∗p)a1−a2=p(x1−x2)+q∗(t−t∗p)a1−a2=p(x1−x2)+q∗(t−t∗p),又因为p<1p<1p<1,所以这个式子的值一定是>0>0>0的,而b1b1b1和和和b2$的大小关系同理
之后这道题的思路就很简单了:
我们维护三个队列:
a[0]a[0]a[0]先存原来蚯蚓从大到小排序的值
a[1]a[1]a[1]存p∗xp*xp∗x从大到小排序的值
a[2]a[2]a[2]存x−p∗xx-p*xx−p∗x从大到小排序的值
之后对于每次操作直接取出三个队列中最大的队首就行了

CODE

#include<cstdio>
#include<string>
#include<cstring>
#include<algorithm>
#define R register ll
#define N 10000005
#define ll long long
#define inf 0x3f3f3f3f
using namespace std;
ll n,m,q,u,v,t,a[3][N],head[3],tail[3];
double p;
inline void read(ll &x)
{x=0;int f=1;char ch=getchar();while (!isdigit(ch)) {if (ch=='-') f=-inf;ch=getchar();}while (isdigit(ch)) x=(x<<1)+(x<<3)+(ch^48),ch=getchar();x*=f;
}
inline bool cmp(int a,int b) {return a>b;}
int main()
{freopen("earthworm.in","r",stdin);freopen("earthworm.out","w",stdout);memset(a,-inf,sizeof(a));read(n);read(m);read(q);read(u);read(v);read(t);for (R i=1;i<=n;++i)read(a[0][i]);sort(a[0]+1,a[0]+1+n,cmp);head[0]=1;tail[0]=n;head[1]=head[2]=1;tail[1]=tail[2]=0;for (R i=1;i<=m;++i){ll mx=-inf,num;for (R j=0;j<=2;++j)if (a[j][head[j]]>mx) mx=a[j][head[j]],num=j;ll tot=mx+(i-1)*q;++head[num];if (i%t==0) printf("%lld ",tot);a[1][++tail[1]]=tot*u/v-i*q;a[2][++tail[2]]=tot-tot*u/v-i*q;}printf("\n");for (R i=1;i<=n+m;++i){ll mx=-inf,num;for (R j=0;j<=2;++j)if (a[j][head[j]]>mx) mx=a[j][head[j]],num=j;ll tot=mx+m*q;++head[num];if (i%t==0) printf("%lld ",tot); }printf("\n");return 0;
}

【NOIP2016提高组复赛】蚯蚓 题解相关推荐

  1. NOIP2016提高组口胡题解

    来来来,让我们来口胡一波 Day1 T1 直接模拟呀!下标都-1然后用%就好了 T2 本次比赛最难的一道题. 目前据我所知有三种算法 首先,我们考虑转化题目. 把链拆成两条,一条向上,一条向下 如果一 ...

  2. NOIP2016提高组复赛解题报告

    Day1 T1-玩具谜题 Day1 T2-天天爱跑步 Day1 T3-换教室 Day2 T1-组合数问题 Day2 T2-蚯蚓 Day2 T3-愤怒的小鸟 转载于:https://www.cnblog ...

  3. 【NOIP2016提高组复赛】天天爱跑步

    Description Solution 这道题是NOIP里面最难的一道题. 暴力打的好可以拿80分,比赛的时候还是打暴力比较好. 我们思考一下从x到y的路径,这个可以拆成从x到lca的路径和从lca ...

  4. #185. [NOIP2016 提高组] 蚯蚓题解

    #185. [NOIP2016 提高组] 蚯蚓题解 题目描述 本题中,我们将用符号 ⌊c⌋\lfloor c \rfloor⌊c⌋ 表示对 ccc 向下取整,例如:⌊3.0⌋=⌊3.1⌋=⌊3.9⌋= ...

  5. 凡人升天传7——NOIP2010 提高组复赛题解

    本蒟蒻在考试时最后一道直接报零*__*,悲痛欲绝,因此在这里著下本题解. 可恶的西西弗 虽然题目做的很垃圾,但在写题解中途不得不感叹除了最后一道,其他真是好水题呀!!! --------------- ...

  6. P1850 [NOIP2016 提高组] 换教室

    P1850 [NOIP2016 提高组] 换教室 题意: 有2n个课安排在n个时间段上,每个时间段上都有两个一样的课同时在不同地方上,起初牛牛被所有课都被安排在Ci上课,另一节课在Di上课.牛牛现在想 ...

  7. [NOIP2016 提高组] 愤怒的小鸟

    [NOIP2016 提高组] 愤怒的小鸟 题意: 有n只猪,给出猪的坐标(xi,yi),问最少用几个形如 y=ax^2+bx 的曲线可以保证所有猪在曲线上,满足a<0,a,b为实数 n<= ...

  8. NOIP 提高组 复赛 历年 试题

    NOIP 提高组  复赛  历年 试题 NOIP 2017 提高组 复赛  试题 https://wenku.baidu.com/view/70de9e29854769eae009581b6bd97f ...

  9. 第一届『Citric杯』NOIP提高组模拟赛 题解

    [官方题解]第一届『Citric杯』NOIP提高组模拟赛 题解 第一题 柠檬超市 这题是本次模拟赛的送分题.做法显然. 但是注意此题有一个陷阱: 注意W和C的规模都是10^9,所以如果直接用doubl ...

  10. 【NOIP2016提高组】天天爱跑步

    题目背景 NOIP2016 提高组 Day1 T2 题目描述 小 C 同学认为跑步非常有趣,于是决定制作一款叫做<天天爱跑步>的游戏.<天天爱跑步>是一个养成类游戏,需要玩家每 ...

最新文章

  1. 和12岁小同志搞创客开发:如何驱动LED数码管?
  2. android 启动速度优化终极方案
  3. 利用swapoff和swapon刷新swap缓存
  4. PAT甲级题目翻译+答案 AcWing(哈希表)
  5. 想了解概率图模型?你要先理解图论的基本定义与形式
  6. 服务的默认端口_Informatica端口管理
  7. HTML学习笔记06-连接
  8. 当模板方法遇到了委托函数,你的代码又可以精简了
  9. 机器学习中的数学(六)--信息论与激活函数
  10. Linux内核分析 - 网络[八补]:IP协议补充
  11. 汉语语音情绪识别,Emotion Recognition by Speech Signal in Mandarin,音标,读音,翻译,英文例句,英语词典...
  12. [计算机组成原理]定点数运算及溢出检测
  13. eclipse中一些常见的报错处理
  14. 虚拟机里的ubuntu设置1920x1080分辨率
  15. yaml存储到文件服务器,通过编写k8s的资源清单yaml文件部署gitlab服务
  16. C语言笔记-10-函数空间-函数概念与规则
  17. 【科软课程-信息安全】Lab12 SQL Injection Attack
  18. Java 8新特性:Optional类
  19. cuda安装失败问题2:install of driver component failed
  20. 关于jq chosen的使用心得

热门文章

  1. 当下最流行的几个php论坛程序比较哪个好
  2. php整人代码,HTML代码整人。。
  3. linux dns配置srv记录,DNS之SRV记录
  4. 新手如何搭建淘宝客网站,实用教程
  5. Java读取文件的N种方法
  6. 绿色清爽win7电脑主题 +炫酷紫色win7主题+美女写真电脑主题
  7. 服务器间大文件传输软件,四种常用的大文件传输方法
  8. pyshp读写shapefile
  9. 智慧城管管理平台和监控系统建设方案
  10. 台型计算机电源电路图,电脑ATX电源控制电路及原理