bzoj4165: 矩阵(堆+hash)
求第k大用堆维护最值并出堆的时候扩展的经典题...
因为只有正数,所以一个矩阵的权值肯定比它的任意子矩阵的权值大,那么一开始把所有满足条件的最小矩阵加进堆里,弹出的时候上下左右扩展一行加进堆,用hash判重即可
#include<iostream>
#include<cstring>
#include<cstdlib>
#include<cstdio>
#include<queue>
#define uint unsigned int
#define ull unsigned long long
using namespace std;
const int maxn=, mod=;
struct poi{int x1, yy1, x2, y2; uint sum;};
struct tjm{ull too; int pre;}e[];
priority_queue<poi>q;
bool operator<(poi a, poi b){return a.sum>b.sum;}
int n, m, mna, mnb, k, tot;
int last[mod];
uint mp[maxn][maxn];
void read(uint &k)
{
int f=; k=; char c=getchar();
while(c<'' || c>'') c=='-' && (f=-), c=getchar();
while(c<='' && c>='') k=k*+c-'', c=getchar();
k*=f;
}
inline void add(int x, ull y){e[++tot].too=y; e[tot].pre=last[x]; last[x]=tot;}
inline int makehs(ull x)
{
int tmp=x%mod;
for(int i=last[tmp];i;i=e[i].pre)
if(e[i].too==x) return i;
add(tmp, x);
return tot;
}
inline int hs(ull x)
{
int tmp=x%mod;
for(int i=last[tmp];i;i=e[i].pre)
if(e[i].too==x) return i;
return -;
}
inline void update(int x1, int yy1, int x2, int y2)
{
ull tmp=;
tmp=tmp*+x1; tmp=tmp*+yy1; tmp=tmp*+x2; tmp=tmp*+y2;
if(hs(tmp)!=-) return;
makehs(tmp);
q.push((poi){x1, yy1, x2, y2, mp[x2][y2]-mp[x2][yy1-]-mp[x1-][y2]+mp[x1-][yy1-]});
}
int main()
{
scanf("%d%d%d%d%d", &n, &m, &mna, &mnb, &k);
for(int i=;i<=n;i++)
for(int j=;j<=m;j++)
read(mp[i][j]), mp[i][j]+=mp[i-][j]+mp[i][j-]-mp[i-][j-];
for(int i=mna;i<=n;i++)
for(int j=mnb;j<=m;j++)
{
ull tmp=;
int x1=i-mna+, yy1=j-mnb+, x2=i, y2=j;
tmp=tmp*+x1; tmp=tmp*+yy1; tmp=tmp*+x2; tmp=tmp*+y2;
makehs(tmp);
q.push((poi){x1, yy1, x2, y2, mp[x2][y2]-mp[x2][yy1-]-mp[x1-][y2]+mp[x1-][yy1-]});
}
for(int i=;i<=k;i++)
{
if(q.empty()) return puts("-1"), ;
poi t=q.top(); q.pop();
int x1=t.x1, yy1=t.yy1, x2=t.x2, y2=t.y2;
if(x1>) update(x1-, yy1, x2, y2);
if(yy1>) update(x1, yy1-, x2, y2);
if(x2<n) update(x1, yy1, x2+, y2);
if(y2<m) update(x1, yy1, x2, y2+);
if(i==k) printf("%u\n", t.sum);
}
}
bzoj4165: 矩阵(堆+hash)的更多相关文章
- bzoj4165 矩阵 堆维护多路归并
题目传送门 https://lydsy.com/JudgeOnline/problem.php?id=4165 题解 大概多路归并是最很重要的知识点了吧,近几年考察也挺多的(虽然都是作为签到题的). ...
- 【bzoj4128】Matrix 矩阵乘法+Hash+BSGS
题目描述 给定矩阵A,B和模数p,求最小的x满足 A^x = B (mod p) 输入 第一行两个整数n和p,表示矩阵的阶和模数,接下来一个n * n的矩阵A.接下来一个n * n的矩阵B 输出 输出 ...
- 【bzoj4165】矩阵 堆+STL-map
题目描述 定义和谐矩阵为长不小于 Mina 且宽不小于 Minb 的矩阵,矩阵的权值为整个矩阵内所有数的和.给定一个长为 N,宽为 M 的矩阵 A,求它的所有和谐子矩阵中权值第 K 小的矩阵,并输出它 ...
- bzoj4165: 矩阵
Description 定义和谐矩阵为长不小于 Mina 且宽不小于 Minb 的矩阵,矩阵的权值为整个矩阵内所有数的和.给定一个长为 N ,宽为 M 的矩阵 A,求它的所有和谐子矩阵中权值第 K 小 ...
- BZOJ 4165 矩阵 堆
先把每个长为$mina$,宽为$minb$的矩阵扔到堆里,然后由于矩阵中的数都是正的,所以我们每取出来一个矩形,,就把他向四个方向扩张一行,再把这新的且更大的四个矩形扔到堆里.注意判重,于是我比较懒用 ...
- day 1 堆 hash 线段树 树状数组 冰茶姬 字典树 二叉查找树
来郑州的第二天,早上开始也没说什么就说了些注意安全,各种各样的注意安全... 冰茶姬: 原来再打食物链时看了一下冰茶姬,只注意了路径压缩,没想到还有什么按秩排序但确实快了不少... int find( ...
- Samjia 和矩阵[loj6173](Hash+后缀数组)
传送门 本题要求本质不同的子矩阵,即位置不同也算相同(具体理解可以看样例自己yy). 我们先看自己会什么,我们会求一个字符串中不同的子串的个数.我们考虑把子矩阵变成一个字符串. 先枚举矩阵的宽度,记为 ...
- 矩阵hash + KMP - UVA 12886 The Big Painting
The Big Painting Problem's Link: http://acm.hust.edu.cn/vjudge/problem/viewProblem.action?id=88791 M ...
- LA 6893 The Big Painting(矩阵Hash)
https://vjudge.net/problem/UVALive-6893 题意: 给出一个小矩阵和大矩阵,在大矩阵中能找到相同的小矩阵. 思路: 矩阵Hash,先对小矩阵计算出它的Hash值,然 ...
随机推荐
- 原生js使用ajax
AJAX 可以在不重新加载整个页面的情况下,与服务器交换数据并更新部分网页内容(默认是异步) (1)使用ajax会用到XMLHttpRequest()对象 (2)然后使用open方法定义请求方法和请求 ...
- python爬虫之requests库
在python爬虫中,要想获取url的原网页,就要用到众所周知的强大好用的requests库,在2018年python文档年度总结中,requests库使用率排行第一,接下来就开始简单的使用reque ...
- Lua学习笔记(8): 元表
元表 Lua中提供了元表(Metatable),其实这个元表就比较像面向对象中的类了,可以通过给某些特殊的标识符赋值达到重载的效果,这些特殊的标识符有: 名称 功能 __index 元表的索引方法 _ ...
- CSP201609-2:火车购票
引言:CSP(http://www.cspro.org/lead/application/ccf/login.jsp)是由中国计算机学会(CCF)发起的"计算机职业资格认证"考试, ...
- 好用的MarkDown编辑器
MarkDown是编写文档非常有用的一个好工具
- Spark Streaming的使用——转载
转载自 Spark Streaming 使用
- 20181113-7 Beta阶段第1周/共2周 Scrum立会报告+燃尽图 05
作业要求https://edu.cnblogs.com/campus/nenu/2018fall/homework/2387 版本控制https://git.coding.net/lglr2018/F ...
- Right-BICEP测试四则运算2
根据Right-BICEP单元测试的方法,我对我写的四则运算2的程序进行了测试: 1.测试能否控制使用乘除 有乘除 无乘除 2.测试是否能加括号 不加括号 加括号 3.能否控制结果没有负数 无负数 4 ...
- 细节--服务器mysql空密码
在部署致服务器的时候 发现mysql密码为空的情况 如果采用 root账户的话 试过很多 比如不写下面这行 <property name="password" value=& ...
- HDU 5183 Negative and Positive (NP) 前缀和+哈希
题目链接: hdu:http://acm.hdu.edu.cn/showproblem.php?pid=5183 bc(中文):http://bestcoder.hdu.edu.cn/contests ...