$Noip2016/Luogu2827$蚯蚓
$Sol$
乍一看就是个模拟叭,用个优先队列维护不就好了.不过这里有一个问题就是怎么解决没被切的蚯蚓的增长问题.可以这样处理,每次切一条蚯蚓,给切完之后的都减去$q$,最后输出答案时都加上$q*m$就$OK$辣.还有一个要注意的地方就是每次切蚯蚓的时候都要求出它的实际长度而不是存在优先队列里的长度.
但是这样只有$80$的样子.瞎分析一波复杂度似乎是$O(mlog_{n+m}^2)$.
考虑优化,如果能把这个$log^2$去掉就好了吖.
注意到,先被切的蚯蚓的较长的一段一定大于后被切的蚯蚓的较长的一段,先被切的蚯蚓的较短的一段一定大于后被切的较短的一段.于是不需要优先队列就可以维护单调性了.具体来说开三个数组,分别存还没被切的蚯蚓(初始数组,记得排序),被切了之后较长的那个蚯蚓,被切之后较短的蚯蚓.每次选取三个数组里最长的那个切,切完之后分别加入后面两个数组就好了不需要多余的维护.
$Code$
#include<iostream>
#include<cstdio>
#include<algorithm>
#include<cstring>
#include<queue>
#include<cmath>
using namespace std;
int r()
{
int x=,y=;;char ch;
ch=getchar();
while(ch<''||ch>'') {if(ch=='-') y=-;ch=getchar();}
while(ch>=''&&ch<='') {x=(x<<)+(x<<)+ch-'';ch=getchar();}
return x*y;
}
bool cmp(int x,int y)
{
return x>y;
}
int q[],q1[],q2[];
int n,m,qq,u,v,t;
double p;
int a[];
int rem;
priority_queue<int> ans;
int main()
{
n=r();m=r();qq=r();u=r();v=r();t=r();
p=(double)u/(double)v;
for(register int i=;i<=n;i++) q[i]=r();
sort(q+,q+n+,cmp);
int h=;
int h1=,t1=,h2=,t2=;
int top;
for(register int i=;i<=m;i++)
{
if(h>n) {if(q1[h1]>q2[h2]) top=q1[h1++];else top=q2[h2++];}
else if(q[h]>=q1[h1]&&q[h]>=q2[h2]) top=q[h++];
else if(q1[h1]>=q2[h2]) top=q1[h1++];
else top=q2[h2++];
top+=rem;
int x1=floor((double)top*p),x2=top-x1;
rem+=qq;
x1-=rem;x2-=rem;
q1[++t1]=x1;q2[++t2]=x2;
if(i%t==) printf("%d ",top);
}
printf("\n");
for(register int i=h;i<=n;i++) ans.push(q[i]);
for(register int i=h1;i<=t1;i++) ans.push(q1[i]);
for(register int i=h2;i<=t2;i++) ans.push(q2[i]);
for(int i=;ans.size();i++)
{
if(i%t==) printf("%d ",ans.top()+rem);
ans.pop();
}
return ;
}
View 去年的 Code
随机推荐
- Java8 Date与LocalDate互转
Java8 日期时间API,新增了LocalDate.LocalDateTime.LocalTime等线程安全类,接下来要说的是LocalDate与java.util.Date之间的转换. 1.Loc ...
- HDFS概念名称节点和数据节点-名称节点
- 选用适合的ORACLE优化器
ORACLE的优化器共有3种: a. RULE (基于规则) b. COST (基于成本) c. CHOOSE (选择性) 设置缺省的优化器,可以通过对init.ora文件中OPTIMIZER ...
- 06Redis入门指南笔记(安全、通信协议、管理工具)
一:安全 1:可信的环境 Redis以简洁为美.在安全层面Redis也没有做太多的工作.Redis的安全设计是在"Redis运行在可信环境"这个前提下做出的.在生产环境运行时不能允 ...
- 阿里云应用实时监控 ARMS 再升级,支持 Prometheus 开源生态
摘要: 应用实时监控服务 (ARMS) 是一款APM类的监控产品. 用户可基于 ARMS 的前端.应用.自定义监控,快速构建实时的应用性能和业务监控能力.ARMS 让所有性能问题“一屏了然”,不遗余力 ...
- 15个非常重要的Apache开源项目汇总
15个非常重要的Apache开源项目汇总 自1999年创立以来,Apache软件基金会如今已成了众多重要的开源软件项目之家.本文列举了15个多年来非常重要的Apache项目,这些项目不仅对开源运动来说 ...
- laravel博客后台操作步骤
- lualatex+Beamer生成ppt
直接放模板代码 \documentclass{beamer} % There are many different themes available for Beamer. A comprehensi ...
- jq杂项方法/工具方法----each() grep() map()
each() 用于循环数组 对象(单纯遍历) 返回 false 可提前停止循环.接受的参数是数组名和要执行的函数,函数参数为数组索引和当前元素. var arr = [30, 40, 50,1 ,8] ...
- 程序中打开IE浏览器并访问指定地址
最简单的方法 Process.Start("iexplore.exe"); //直接打开IE浏览器(打开默认首页) Process.Start(" ...