$POJ2442\ Sequence$ 堆
正解:堆
解题报告:
全场除了我都切了系列$kk$
首先看$n=2$的情况.
首先暴力不说?就记录一个$sum$再分别记录$xy$两维的下标存到堆里面每次取队头并继续扩展就完事$QwQ$.
然后发现会枚举重复,就不太优秀,考虑优化$QwQ$.
于是考虑记录下这个点是扩展$x$的时候扩展来的还是扩展$y$的时候扩展来的,如果是扩展$x$的时候扩展来的就只扩展$x$了,否则就$xy$都要扩展.
这样就能保证每个状态只会被扩展一次了.
然后现在考虑$n>2$的情况.
就直接当$n=2$地做$n-1$次就完事
然后这个复杂度是$O(nmlogm)$的.
优化康考试总结$QwQ$,$over$
#include<algorithm>
#include<iostream>
#include<iomanip>
#include<vector>
#include<cstdio>
#include<queue>
using namespace std;
#define il inline
#define gc getchar()
#define ri register int
#define rb register bool
#define rc register char
#define rp(i,x,y) for(ri i=x;i<=y;++i)
#define my(i,x,y) for(ri i=x;i>=y;--i) const int N=1e5+;
int n,m,as;
vector<int>V[N],v;
struct node{int sum,fr,nwx,nwy;};
priority_queue<node>Q; il int read()
{
ri x=;rb y=;rc ch=gc;
while(ch!='-' && (ch>'' || ch<''))ch=gc;
if(ch=='-')y=,ch=gc;
while(ch>='' && ch<='')x=(x<<)+(x<<)+(ch^''),ch=gc;
return y?x:-x;
}
il bool cmp(ri gd,ri gs){return gd>gs;}
il bool operator < (node gd,node gs){return gd.sum>gs.sum;}
il void work(ri x,ri y)
{
ri szx=V[x].size(),szy=V[y].size();
while(Q.size())Q.pop();;v.clear();Q.push((node){V[x][]+V[y][],,,});
rp(i,,m)
{
node nw=Q.top();Q.pop();v.push_back(nw.sum);
if(nw.nwx+<szx)Q.push((node){nw.sum-V[x][nw.nwx]+V[x][nw.nwx+],,nw.nwx+,nw.nwy});
if(nw.fr)continue;
if(nw.nwy+<szy)Q.push((node){nw.sum-V[y][nw.nwy]+V[y][nw.nwy+],,nw.nwx,nw.nwy+});
}
V[y]=v;
} int main()
{
//freopen("2442.in","r",stdin);//freopen("2442.out","w",stdout);
ri T=read();
while(T--)
{
n=read();m=read();as=;
rp(i,,n){V[i].clear();rp(j,,m)V[i].push_back(read());sort(V[i].begin(),V[i].end());}
rp(i,,n)work(i-,i);rp(i,,m-)printf("%d ",V[n][i]);printf("\n");
}
return ;
}
随机推荐
- mysql 获取最近一个月每一天
select date_add(curdate(), interval(cast(help_topic_id as signed integer) - 30) day) day from mysql. ...
- DECLARE
-- 修正用プログラム DECLARE CURSOR c_adv_fee_detail IS SELECT adv_fee.fee_mgmt_num, ...
- hdu 3635 Dragon Balls (MFSet)
Problem - 3635 切切水题,并查集. 记录当前根树的结点个数,记录每个结点相对根结点的转移次数.1y~ 代码如下: #include <cstdio> #include < ...
- 使用jquery.form.js的ajaxsubmit方法提交数据的Bug
周五同事遇到一个很奇怪的问题,调到下班,虽然问题解决了,但是不知道问题的具体原因,回来翻了翻代码,才发现症结所在,下面就分享出来,供遇到同样问题的同行们参考: 先把问题描述一下,做的功能是使用ajax ...
- java项目和npm项目命令窗口部署方便调试
1.maven窗口选择root项目 在点击lifstyle--> package 点击播放箭头 build完毕以后会出现在TARGET目录下todo.jar 在执行 java -jar todo ...
- 一次接口压力测试qps极低原因分析及解决过程
一次接口压力测试qps极低原因分析及解决过程 9-2日在做内部的性能测试相关培训时,发现注册接口压力测试qps极低(20左右),这个性能指标远不能达到上线标准 ,经过一系列调试,最后定位 98%的时间 ...
- I/O 端口和 I/O 内存
每个外设都是通过读写它的寄存器来控制. 大部分时间一个设备有几个寄存器, 并且在连 续地址存取它们, 或者在内存地址空间或者在 I/O 地址空间. 在硬件级别上, 内存区和 I/O 区域没有概念上的区 ...
- 被孟加拉题吊打的ACM考试
https://codeforces.com/gym/101864 题目并不难 B 考虑新加入的线段和之前线段有交的个数 总数-不交的,不交的:右端点在[l,r]左边,左端点在[l,r]右边的. 维护 ...
- ajaxSetup()方法
使用ajaxSetup()方法设置全局Ajax默认选项 使用ajaxSetup()方法可以设置Ajax请求的一些全局性选项值,设置完成后,后面的Ajax请求将不需要再添加这些选项值,它的调用格式为: ...
- [HNOI2019]白兔之舞
memset0 多合一无聊题 mod k=t,并且k是p-1的约数 单位根反演石锤了. 所以直接设f[i]表示走i步的方案数, 然后C(L,i)分配位置,再A^i进行矩乘得到f[i] 变成生成函数F( ...