\(\text{Problem}\)

\(\text{Solution}\)

纪念我考场正解被二分暴力暴踩。。。

首先二分的话,显然可以二分出答案,然后数矩阵和大于等于本矩阵的是否有 \(k\) 个

加一些优化就可以 \(AC\)?!!

不管它,正解就是让矩阵行列大小从小到大扩展,矩阵和小一些的肯定已经出来了

做 \(k\) 次即可,注意判重

本人手打哈希表+手打堆,因为数组开小光荣 \(\text{RE} 80pts\)

欲哭无泪

\(\text{Code}\)

#include <cstdio>
#include <iostream>
#define LL long long
#define re register
#define register
using namespace std; const int N = 1005, mod = 1e6 + 7;
int n, m, ma, mb, k, a[N][N];
LL s[N][N]; inline void read(int &x)
{
x = 0; char ch = getchar();
while (ch < '0' || ch > '9') ch = getchar();
while (ch >= '0' && ch <= '9') x = (x << 3) + (x << 1) + ch - '0', ch = getchar();
} struct Hash{int x, y, nxt;}e[mod * 2 + 5];
int ht[mod + 5], tot;
inline void insert(int x, int y)
{
int key = (10000000LL * x + y) % mod;
e[++tot] = Hash{x, y, ht[key]}, ht[key] = tot;
}
inline int query(int x, int y)
{
int key = (10000000LL * x + y) % mod;
for(re int i = ht[key]; i; i = e[i].nxt)
if (e[i].x == x && e[i].y == y) return 1;
return 0;
} struct node{int x0, y0, x1, y1; LL s;};
struct Heap{
int size;
node h[N * N * 2]; inline int check(int x, int y)
{
if (x > 0 && y > 0 && x <= n && y <= m) return 1;
return 0;
}
inline int Num(int x, int y){return (x - 1) * m + y;}
inline node top(){return h[1];}
inline void pop(){h[1] = h[size--], down(1);} inline void up(int x){while (x > 1 && h[x].s < h[x >> 1].s) swap(h[x], h[x >> 1]), x >>= 1;}
inline void down(int x)
{
while (((x << 1) <= size && h[x].s > h[x << 1].s) || ((x << 1 | 1) <= size && h[x].s > h[x << 1 | 1].s))
{
int y = x << 1;
if (h[y | 1].s < h[y].s) y |= 1;
swap(h[x], h[y]), x = y;
}
} inline void push(node c)
{
if (!(check(c.x0, c.y0) && check(c.x1, c.y1))) return;
if (query(Num(c.x0, c.y0), Num(c.x1, c.y1))) return;
insert(Num(c.x0, c.y0), Num(c.x1, c.y1));
c.s = s[c.x1][c.y1] - s[c.x0 - 1][c.y1] - s[c.x1][c.y0 - 1] + s[c.x0 - 1][c.y0 - 1];
h[++size] = c;
up(size);
}
}T; int main()
{
read(n), read(m), read(ma), read(mb), read(k);
for(re int i = 1; i <= n; i++)
for(re int j = 1; j <= m; j++)
read(a[i][j]), s[i][j] = s[i - 1][j] + s[i][j - 1] - s[i - 1][j - 1] + a[i][j];
for(re int i = 1; i <= n - ma + 1; i++)
for(re int j = 1; j <= m - mb + 1; j++) T.push(node{i, j, i + ma - 1, j + mb - 1});
LL ans = -1; node now;
for(re int i = 1; i <= k; i++)
{
now = T.top(), T.pop();
if (i == k){ans = now.s; break;}
T.push(node{now.x0, now.y0, now.x1, now.y1 + 1});
T.push(node{now.x0, now.y0, now.x1 + 1, now.y1});
}
printf("%lld\n", ans);
}

JZOJ 4754.矩阵的更多相关文章

  1. [jzoj]1115.【HNOI2008】GT考试

    Link https://jzoj.net/senior/#main/show/1115 Description 申准备报名参加GT考试,准考证号为n位数X1X2X3...Xn-1Xn(0<=X ...

  2. Q矩阵输出

    程序启动时: 1.Q矩阵在InitQX中对角阵赋初值为0.25,GPS卫星数6 2.Q矩阵初值在初始化时由GetBL获得,改变Q对角阵 Q初值第0个卫星 10000000000.000 X初值第0个卫 ...

  3. jzoj2701 【GDKOI2012模拟02.01】矩阵

    传送门:https://jzoj.net/senior/#main/show/2701 [题目大意] 给出矩阵A,求矩阵B,使得

  4. 2019中山纪念中学夏令营-Day20[JZOJ] T1旅游详解

    2019中山纪念中学夏令营-Day20[JZOJ] 提高组B组 Team_B组 T1 旅游 Time Limits: 2000 ms  Memory Limits: 262144 KB Descrip ...

  5. C语言 · 矩阵乘法 · 算法训练

    问题描述 输入两个矩阵,分别是m*s,s*n大小.输出两个矩阵相乘的结果. 输入格式 第一行,空格隔开的三个正整数m,s,n(均不超过200). 接下来m行,每行s个空格隔开的整数,表示矩阵A(i,j ...

  6. 获取Canvas当前坐标系矩阵

    前言 在我的另一篇博文 Canvas坐标系转换 中,我们知道了所有的平移缩放旋转操作都会影响到画布坐标系.那在我们对画布进行了一系列操作之后,怎么再知道当前矩阵数据状态呢. 具体代码 首先请看下面的一 ...

  7. CSharpGL(32)矩阵与四元数与角度旋转轴的相互转换

    CSharpGL(32)矩阵与四元数与角度旋转轴的相互转换 三维世界里的旋转(rotate),可以用一个3x3的矩阵描述:可以用(旋转角度float+旋转轴vec3)描述.数学家欧拉证明了这两种形式可 ...

  8. “为什么DirectX里表示三维坐标要建一个4*4的矩阵?”

    0x00 前言 首先要说明的是,本文的标题事实上来自于知乎上的一个同名问题:为什么directX里表示三维坐标要建一个4*4的矩阵? - 编程 .因此,正如Milo Yip大神所说的这个标题事实上是存 ...

  9. js实现蛇形矩阵

    参加腾讯前端实习生笔试,真的是被虐了千百遍,除了一条js程序题,其他半点前端都没有,都是考算法,计算机原理,数据结构.下面贴上腾讯笔试最后三大条中的一条,实现一个蛇形矩阵的输出.蛇形矩阵的什么样这里我 ...

  10. ACM 中 矩阵数据的预处理 && 求子矩阵元素和问题

            我们考虑一个$N\times M$的矩阵数据,若要对矩阵中的部分数据进行读取,比如求某个$a\times b$的子矩阵的元素和,通常我们可以想到$O(ab)$的遍历那个子矩阵,对它的各 ...

随机推荐

  1. 解决Linux使用deepin-wine跑qq,tim打不开文件所在文件夹

    前言 使用deepin-wine 跑qq,发现一个小bug 这里点击打开文件夹是没有效果的,包括在 tim 上也是这样 问题原因 出现这个问题是因为 deepin-wine 跑的 QQ,Tim 打开文 ...

  2. 关于仿照js写python算法

    前言 我们学校的统一认证的登录系统,用了一套不知道哪弄来的 js加密算法 (我已经查到了,应该是出自这里 地址),有一个参数是通过 js 计算得到的,无奈我先想模拟登录就必须解决这个算法,这个说明是d ...

  3. js this获取元素ID

    <table id="cyyj_table" class="table01" cellpadding="5" cellspacing= ...

  4. Redis——02 学习

    Redis--02 前面了解了 Redis 以及在 Linux 的安装,下面了解一些 Redis 常用的命令. Redis 常用命令: Redis 是 Key-Value 形式,Key 为字符串类型, ...

  5. redis(二)

    Redis简单使用 一. Redis的安装 Redis作为一款目前这个星球上性能最高的非关系型数据库之一. 拥有每秒近十万次的读写能力. 其实力只能用恐怖来形容. mac版本, brew: https ...

  6. 青少年CTF-Web-Robots

    题目信息 题目名称:Robots 题目描述:昨天十三年社团讲课,讲了Robots.txt的作用,小刚上课没有认真听课正在着急,你能不能帮帮忙? 题目难度:一颗星 解题过程 访问题目链接 浏览器里是空白 ...

  7. SQLSERVER 的复合索引和包含索引到底有啥区别?

    一:背景 1. 讲故事 在 SQLSERVER 中有非常多的索引,比如:聚集索引,非聚集索引,唯一索引,复合索引,Include索引,交叉索引,连接索引,奇葩索引等等,当索引多了之后很容易傻傻的分不清 ...

  8. .NET周报【1月第1期 2023-01-06】

    国内文章 [开源]基于.net6+gtksharp实现的Linux下的图形界面串口调试工具 https://www.cnblogs.com/flykai/p/17007554.html 由于公司的上位 ...

  9. 物以类聚人以群分,通过GensimLda文本聚类构建人工智能个性化推荐系统(Python3.10)

    众所周知,个性化推荐系统能够根据用户的兴趣.偏好等信息向用户推荐相关内容,使得用户更感兴趣,从而提升用户体验,提高用户粘度,之前我们曾经使用协同过滤算法构建过个性化推荐系统,但基于显式反馈的算法就会有 ...

  10. NSOperation的简单使用

    1.默认情况下,NSOperation并不具备封装操作的能力,必须使用它的子类,使用NSOperation子类的方式有3种: 1> NSInvocationOperation 2> NSB ...