$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
随机推荐
- Jquery FormData文件异步上传 快速指南
网站中文件的异步上传是个比较麻烦的问题,不过现在通过jquery 可以很容易的解决这个问题: 使用jquery2.1版本,较老版本不支持异步文件上传功能: 表单代码: <form id=&quo ...
- H3C 主机接收IP包
- SQL,范式,事务
数据库范式: 构造数据库必须遵循一定的规则.在关系数据库中,这种规则就是范式. 范式是符合某一种级别的关系模式的集合.数据库中的关系必须满足一定的要求,即满足不同的范式. 满足最低要求的范式是第一范式 ...
- 基于BERT预训练的中文命名实体识别TensorFlow实现
BERT-BiLSMT-CRF-NERTensorflow solution of NER task Using BiLSTM-CRF model with Google BERT Fine-tuni ...
- Java实现Windows锁屏
public class LockWindows { public static void main(String [] args) throws Exception { Runtime.getRun ...
- 用于数组的delete p324
delete 对象地址; delete 首先调用待清除对象的析构函数,然后释放内存 如果delete一个void指针,唯一发生的事情就是释放了内存.因为通过void指针,无法知道对象的类型,就无法调用 ...
- pytorch实现BiLSTM+CRF用于NER(命名实体识别)
pytorch实现BiLSTM+CRF用于NER(命名实体识别)在写这篇博客之前,我看了网上关于pytorch,BiLstm+CRF的实现,都是一个版本(对pytorch教程的翻译), 翻译得一点质量 ...
- C# 标准性能测试
经常我写一个类,作为一个工具类,小伙伴会问我这个类的性能,这时我就需要一个标准的工具进行测试. 本文告诉大家如何使用 benchmarkdotnet 做测试. 现在在 github 提交代码,如果有小 ...
- vue+element-ui 字体自适应不同屏幕
项目背景:屏幕自适应问题,当在不同分辨率的屏幕上显示页面时,页面的字体需要根据屏幕大小来自适应,想到使用rem作为字体的单位 vue-cli脚手架下的index.html中写入以下js脚本 <s ...
- 《Netty权威指南》(一)简单的时间服务器P69
由于该书是基于Netty5编写的样例代码,而Netty5已经被官方废弃. 目前基于推荐版的4.1.12.Final在学习过程中,可能会出现个别接口不一致的情况.所以记录可在4.1.12下编译通过的代码 ...