题解:P14036 [PAIO 2025] Rooks

如果暴力 BFS,枚举每个点之后暴力枚举同行同列的所有点,时间复杂度不会低于 \(O(nm(n+m))\),明显过不去,因此必须要以行和列为单位整体考虑。

由题意,路径上所有单元格的 \(A\) 值单调递增,因此类似于拓扑排序的思想,按照 \(A\) 值从小到大枚举单元格。假设枚举到单元格 \((r,c)\)。设 \(f_{r,c}\) 表示走到 \((r,c)\) 的最少步数。考虑对每行每列维护在该行/列中有哪些单元格可以进行有效转移,这个转移形如:

\[f_{r,c}=\min\limits_{(r',c')}\{f_{r',c'}\}+1 \]

其中 \((r',c')\) 满足 \(r'=r\lor c'=c\)\(A_{r,c}-K\le A_{r',c'}<A_{r,c}\)

发现一行/列中可以进行有效转移的单元格要么 \(f\) 值比较小,要么虽然 \(f\) 比较大,但是 \(A\) 比较小。换言之,这些单元格一定满足在 \(f\) 升序的情况下 \(A\) 降序的条件,可以使用单调队列维护。

每个单元格至多入队 \(2\) 次,且转移时直接取队首,时间复杂度 \(O(nm)\)

//By: OIer rui_er
#include <bits/stdc++.h>
#define rep(x, y, z) for(int x = (y); x <= (z); ++x)
#define per(x, y, z) for(int x = (y); x >= (z); --x)
#define endl '\n'
using namespace std;
typedef long long ll;template<typename T> void chkmin(T& x, T y) {if(y < x) x = y;}
template<typename T> void chkmax(T& x, T y) {if(x < y) x = y;}const int inf = 0x3f3f3f3f;vector<vector<int>> calculate_moves(vector<vector<int>> A, int K) {int N = A.size(), M = A[0].size();rep(i, 0, N - 1) rep(j, 0, M - 1) --A[i][j];vector<int> r(N * M), c(N * M);rep(i, 0, N - 1) rep(j, 0, M - 1) r[A[i][j]] = i, c[A[i][j]] = j;vector<deque<int>> dqR(N), dqC(M);vector<int> dis(N * M, +inf);vector<vector<int>> R(N, vector<int>(M));dis[0] = 0;dqR[r[0]].push_back(dis[0]);dqC[c[0]].push_back(dis[0]);R[r[0]][c[0]] = 0;rep(i, 1, N * M - 1) {while(!dqR[r[i]].empty() && dqR[r[i]].front() < i - K) dqR[r[i]].pop_front();while(!dqC[c[i]].empty() && dqC[c[i]].front() < i - K) dqC[c[i]].pop_front();if(!dqR[r[i]].empty()) chkmin(dis[i], dis[dqR[r[i]].front()] + 1);if(!dqC[c[i]].empty()) chkmin(dis[i], dis[dqC[c[i]].front()] + 1);while(!dqR[r[i]].empty() && dis[dqR[r[i]].back()] >= dis[i]) dqR[r[i]].pop_back();while(!dqC[c[i]].empty() && dis[dqC[c[i]].back()] >= dis[i]) dqC[c[i]].pop_back();dqR[r[i]].push_back(i);dqC[c[i]].push_back(i);R[r[i]][c[i]] = dis[i] == +inf ? -1 : dis[i];}return R;
}#ifdef LOCALint main() {ios::sync_with_stdio(false);cin.tie(0); cout.tie(0);int N, M, K;cin >> N >> M >> K;vector<vector<int>> A(N, vector<int>(M));rep(i, 0, N - 1) rep(j, 0, M - 1) cin >> A[i][j];vector<vector<int>> R = calculate_moves(A, K);rep(i, 0, N - 1) rep(j, 0, M - 1) cout << R[i][j] << " \n"[j == M - 1];return 0;
}#endif

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/927551.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

2025/8/26

T2 模板(monica) 这是一道矩阵求逆的题,求矩阵 \(X\) 使得 \(A\times X=B\)。由于 \(A\times A^{-1}=I\),所以 \(X=A^{-1}\times B\) . 所以只需求 \(A^{-1}\),再与 \(B\) 做矩阵乘法并取模就完成了。 代码如下:…

27 考研初试时间大约是什么时候?

考研初试的时间一般都是在每年 12 月的倒数第二个周末,最近几年的情况一直如此。所以,27 考研的时间可能就是 2026 年 12 月 19 日,相比于 26 考研,从初试时间上来看,27 考研又提前了一天:

《C++ STL:vector类(上)》:详解基础使用核心接口及经典算法题 - 实践

pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-family: "Consolas", "Monaco", "Courier New", …

伪静态网站入侵浙江江能建设有限公司网站

Azure DevOps Server (原名TFS)是微软公司的软件开发管理平台&#xff0c;也是著名的软件开发过程管理工具&#xff1b;系统中记录了软件开发过程中的需求、问题、缺陷和迭代计划等各种软件开发工作项数据。 对于工作项数据的批量操作(例如新增和编辑)&#xff0c;Excel是一个非…

数据结构 - 跳表 Skip List

跳表(Skip List)是一种用于查找的类似于链表的数据结构,是对有序链表的改进,能够在 \(O(\log{n})\) 时间内完成增加、删除、查找操作。跳表相比于树堆与红黑树,其功能与性能相当,并且跳表的代码长度相较下更短。…

06. 定时器

一、定时器QML 有一个 Timer元素,它允许你在 QML 中设置定时器。这个元素是 Qt Quick 模块的一部分。我们可以通过定时器的 interval 属性设置 定时间隔,通过 running 属性设置 定时器默认是否运行,通过 repeat 属性…

高端集团网站建设公司铭万做的网站怎么样

11.盛最多水的容器 给定一个长度为 n 的整数数组 height 。有 n 条垂线&#xff0c;第 i 条线的两个端点是 (i, 0) 和 (i, height[i]) 。 找出其中的两条线&#xff0c;使得它们与 x 轴共同构成的容器可以容纳最多的水。 返回容器可以储存的最大水量。 说明&#xff1a;你不能倾…

怎么自己建立网站站长之家seo

前言 Gitee 是一个中国的开源代码托管平台&#xff0c;类似于 GitHub&#xff0c;旨在为开发者提供一个高效、稳定、安全的代码管理和协作开发环境。Gitee 支持 Git 协议&#xff0c;可以托管 Git 仓库&#xff0c;进行版本控制、代码协作、项目管理等操作。 1. Gitee 的主要…

职业学院网站建设网站建设需要哪些资质

这是渲染的数据 这是生成的pdf文件&#xff0c;直接可以打印 需要安装和npm依赖和引入封装的pdf.js文件 npm install --save html2canvas // 页面转图片 npm install jspdf --save // 图片转pdfpdf.js文件 import html2canvas from "html2canvas"; import jsPDF …

没人做网站了吗重庆建设网站哪家专业

ArcGIS软件可以很方便的直接实现度分秒转度、度转度分秒(度分秒→度、度→度分秒)。 文章目录 一、转换预览二、工具介绍三、案例解析一、转换预览 借助ArcGIS快速实现度分秒与度及其他格式的坐标转换,例如:度分秒→度、度→度分秒。 1. 度→度分秒 2. 度分秒→度 转换后…

硬件-电容学习DAY23——电容设计实战指南:从选型到高频应用 - 教程

pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-family: "Consolas", "Monaco", "Courier New", …

NOIP之前的复健记录

写一些做题记录,题解和随机话。 这回真是高一零基础学OI/文化课了。CF547B考虑每一个数对答案的贡献。 自然是当这个数 \(a_i\)是所选的区间最小值时对答案有贡献,所以我们找到左边第一个比 \(a_i\) 大的数 \(a_l\) …

支付网站开发建设费用怎么入账网站建设设计服务公司

了解细胞对基因扰动的反应是许多生物医学应用的核心&#xff0c;从识别癌症中涉及的基因相互作用到开发再生医学方法。然而&#xff0c;可能的多基因扰动数量的组合爆炸严重限制了实验验证。在这里&#xff0c;作者提出了图增强的基因激活和抑制模拟器&#xff08;GEARS&#x…

Linux 命令行安装达梦数据库

达梦官方不提供 docker 镜像了,由于要开发国产化项目,因此只能暂时在 Linux 服务器上直接安装。如果 Linux 操作系统带有图形化界面的话,安装起来很简单,参考官网即可,这里不再赘述。有的客户现场提供的 Linux 服…

Google开源Tunix:JAX生态的LLM微调方案来了

AX生态这两年在LLM训练这块追赶得挺快。PyTorch虽然还是主流但JAX在并行计算、TPU加速和API组合性上确实有些独特的优势。Google今天放出了Tunix这个库,专门做LLM的后训练——微调、强化学习、知识蒸馏这些都能搞。 T…

域名和空间都有了怎么做网站三门峡网站制作

原标题&#xff1a;鸿蒙OS 2.0系统正式发布&#xff01;余承东&#xff1a;明年华为系手机将会搭载由于众所周知的原因&#xff0c;华为手机这两年过的很艰难&#xff0c;尤其是今年力度大了后&#xff0c;华为手机接下来可能面临无芯片可用的严重情况。而除了一些硬件外&#…

看上去高端的网站兰州建设局网站

全文共2485字&#xff0c;预计学习时长12分钟图源&#xff1a;unsplash数据科学的生命周期主要包括数据收集、数据清理、探索性数据分析、模型构建和模型部署。作为数据科学家或机器学习工程师&#xff0c;能够部署数据科学项目非常重要&#xff0c;这有助于完成数据科学生命周…

网站服务方案2022昆明今天刚刚发生的新闻

常用类 目录 1. QString 字符串类&#xff08;掌握&#xff09; 2. 容器类&#xff08;掌握&#xff09; 2.1 顺序容器QList 2.2 关联容器QMap 3. 几种Qt数据类型&#xff08;熟悉&#xff09; 3.1 跨平台数据类型 3.2 QVariant 统一数据类型 3.3 QStringList 字符串列表 4. QD…

实用指南:如何优化 C# MVC 应用程序的性能

实用指南:如何优化 C# MVC 应用程序的性能2025-10-04 20:30 tlnshuju 阅读(0) 评论(0) 收藏 举报pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: blo…

软件工程的第一次作业

软件工程的第一次作业这个作业属于哪个课程 https://edu.cnblogs.com/campus/fzu/202501SoftwareEngineering这个作业要求在哪里 https://edu.cnblogs.com/campus/fzu/202501SoftwareEngineering/homework/13546这个作…