Noip2016/Luogu2827蚯蚓
Sol
乍一看就是个模拟叭,用个优先队列维护不就好了.不过这里有一个问题就是怎么解决没被切的蚯蚓的增长问题.可以这样处理,每次切一条蚯蚓,给切完之后的都减去q,最后输出答案时都加上q∗m就OK辣.还有一个要注意的地方就是每次切蚯蚓的时候都要求出它的实际长度而不是存在优先队列里的长度.
但是这样只有80的样子.瞎分析一波复杂度似乎是O(mlog2n+m).
考虑优化,如果能把这个log2去掉就好了吖.
注意到,先被切的蚯蚓的较长的一段一定大于后被切的蚯蚓的较长的一段,先被切的蚯蚓的较短的一段一定大于后被切的较短的一段.于是不需要优先队列就可以维护单调性了.具体来说开三个数组,分别存还没被切的蚯蚓(初始数组,记得排序),被切了之后较长的那个蚯蚓,被切之后较短的蚯蚓.每次选取三个数组里最长的那个切,切完之后分别加入后面两个数组就好了不需要多余的维护.
Code

#include<iostream> #include<cstdio> #include<algorithm> #include<cstring> #include<queue> #include<cmath> using namespace std; int r() { int x=0,y=1;;char ch; ch=getchar(); while(ch<'0'||ch>'9') {if(ch=='-') y=-1;ch=getchar();} while(ch>='0'&&ch<='9') {x=(x<<3)+(x<<1)+ch-'0';ch=getchar();} return x*y; } bool cmp(int x,int y) { return x>y; } int q[8000010],q1[8000010],q2[8000010]; int n,m,qq,u,v,t; double p; int a[100010]; 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=1;i<=n;i++) q[i]=r(); sort(q+1,q+n+1,cmp); int h=1; int h1=1,t1=0,h2=1,t2=0; int top; for(register int i=1;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==0) 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=1;ans.size();i++) { if(i%t==0) printf("%d ",ans.top()+rem); ans.pop(); } return 0; }
光伴随的阴影
【推荐】还在用 ECharts 开发大屏?试试这款永久免费的开源 BI 工具!
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 软件产品开发中常见的10个问题及处理方法
· .NET 原生驾驭 AI 新基建实战系列:向量数据库的应用与畅想
· 从问题排查到源码分析:ActiveMQ消费端频繁日志刷屏的秘密
· 一次Java后端服务间歇性响应慢的问题排查记录
· dotnet 源代码生成器分析器入门
· ThreeJs-16智慧城市项目(重磅以及未来发展ai)
· .NET 原生驾驭 AI 新基建实战系列(一):向量数据库的应用与畅想
· Ai满嘴顺口溜,想考研?浪费我几个小时
· Browser-use 详细介绍&使用文档
· 软件产品开发中常见的10个问题及处理方法