当前位置: 首页 > news >正文

模拟赛Atcoder Beginner Contest 433官方题解(E题)

问题描述

给定整数 \(N, M\),一个包含 \(N\) 个整数的序列 \(X = (X_1, X_2, \dots, X_N)\),以及一个包含 \(M\) 个整数的序列 \(Y = (Y_1, Y_2, \dots, Y_M)\)

判断是否存在一个 \(N\)\(M\) 列的整数矩阵 \(A = (A_{i,j})\)(其中 \(1 \le i \le N, 1 \le j \le M\)),满足以下所有条件,如果存在,请输出一个这样的矩阵。

条件:

  1. \(1 \le A_{i,j} \le N \times M\)
  2. \(A\) 的所有 \(N \times M\) 个元素互不相同。
  3. 对于每个 \(i = 1, 2, \dots, N\),第 \(i\) 行的最大值等于 \(X_i\)
  4. 对于每个 \(j = 1, 2, \dots, M\),第 \(j\) 列的最大值等于 \(Y_j\)

给定 \(T\) 个测试用例,请解决每个测试用例。

约束条件

  • \(1 \le T \le 10^5\)
  • \(1 \le N, M\)
  • 所有测试用例的 \(N \times M\) 的总和不超过 \(2 \times 10^5\)
  • \(1 \le X_i, Y_j \le N \times M\)
  • 所有输入值均为整数

输入格式

\(T\)
\(case_1\)
\(case_2\)
\(\dots\)
\(case_T\)

每个测试用例的格式如下:

\(N\) \(M\)
\(X_1\) \(X_2\) \(\dots\) \(X_N\)
\(Y_1\) \(Y_2\) \(\dots\) \(Y_M\)

输出格式
按顺序输出每个测试用例的答案,用换行分隔。

对于每个测试用例,如果不存在满足所有条件的矩阵 \(A\),则输出 "No"。

否则,输出以下格式的矩阵 \(A\)

\(Yes\)
\(A_{1,1}\) \(A_{1,2}\) \(\dots\) \(A_{1,M}\)
\(A_{2,1}\) \(A_{2,2}\) \(\dots\) \(A_{2,M}\)
\(\vdots\)
\(A_{N,1}\) \(A_{N,2}\) \(\dots\) \(A_{N,M}\)

如果有多个满足条件的矩阵 \(A\),输出任意一个均可。

样例输入 1

3
2 3
5 6
5 3 6
3 3
5 4 6
6 2 4
5 4
18 20 19 14 17
18 20 14 15

样例输出 1

Yes
5 1 4
2 3 6
No
Yes
18 12 4 9
13 20 1 10
16 19 6 8
2 5 14 3
11 17 7 15

第一个测试用例的说明

在样例输出中,矩阵 \(A\) 的所有元素都在 1 到 6 之间且互不相同,并且满足:

  • 第 1 行的最大值:\(\max\{5, 1, 4\} = 5 = X_1\)
  • 第 2 行的最大值:\(\max\{2, 3, 6\} = 6 = X_2\)
  • 第 1 列的最大值:\(\max\{5, 2\} = 5 = Y_1\)
  • 第 2 列的最大值:\(\max\{1, 3\} = 3 = Y_2\)
  • 第 3 列的最大值:\(\max\{4, 6\} = 6 = Y_3\)

因此所有条件都满足。

其他输出(例如以下形式)也是可以接受的:

Yes
5 3 1
4 2 6

如果 \(X\) 中包含重复元素,答案就是 No;\(Y\) 也是同样的道理。我们假设没有这种情况。

考虑按从 \(N \times M\)\(1\) 的降序顺序填充矩阵 \(A\) 的元素。

假设我们已经放置了所有大于 \(v\) 的元素。那么放置 \(v\) 的约束条件如下:

  • 如果 \(v\) 同时存在于 \(X\)\(Y\) 中:对于满足 \(X_i = Y_j = v\) 的位置,令 \(A_{i,j} = v\)
  • 如果 \(v\) 仅存在于 \(X\) 中:对于满足 \(X_i = v\) 的行,选择一个满足 \(Y_j > v\)\(A_{i,j}\) 尚未确定的列 \(j\),并令 \(A_{i,j} = v\)
  • 如果 \(v\) 仅存在于 \(Y\) 中:对于满足 \(Y_j = v\) 的列,选择一个满足 \(X_i > v\)\(A_{i,j}\) 尚未确定的行 \(i\),并令 \(A_{i,j} = v\)
  • 如果 \(v\) 既不在 \(X\) 中也不在 \(Y\) 中:选择满足 \(X_i > v\)\(Y_j > v\)\(A_{i,j}\) 尚未确定的位置 \((i,j)\),并令 \(A_{i,j} = v\)

由于我们是按降序填充 \(v\) 的,可填充的候选位置数量是单调递增的。因此,只要满足上述规则,我们可以自由地填充这些位置。

剩下的就是将此思路实现为代码,但直接按上述规则检查会导致很高的计算复杂度,从而造成超时(TLE)。在实现时,我们可以认为一旦满足 \(v < \min(X_i, Y_j)\)\(A_{i,j}\) 就可以自由填充,并将满足 \(v = \min(X_i, Y_j)\) 的位置 \((i,j)\) 管理在列表中。更多细节请参考下面的示例代码。

http://www.rkmt.cn/news/59026.html

相关文章:

  • 103_尚硅谷_break课堂练习
  • 2025年北京留学机构哪家好:北京留学,英国留学,香港留学,新加坡留学,澳洲留学,美国留学
  • 2025年上海全铝家居定制品牌综合实力排行榜TOP5
  • 安康PC耐力板厂家实力榜2025
  • 吴恩达深度学习课程二: 改善深层神经网络 第三周:超参数调整,批量标准化和编程框架 课后习题和代码实践
  • 深入解析:【经验】Word/WPS|用邮件合并批量填写表格或教案,单个Word导出成多个文件(包含插入图片的教程)
  • LTE系统资源分配MATLAB实现示例
  • 科研院校选购指南:小型高低温试验箱,哪个厂家精度更高、更靠谱?
  • 2025 年 11 月建筑加固厂家权威推荐榜:碳纤维加固、粘钢加固,专业工艺与持久安全的高效解决方案
  • 数字化转型:小企业反而更有优势?
  • 完整教程:未来之窗昭和仙君(四十一)开发收银系统15k大小——东方仙盟筑基期
  • 办公软件!zRenamer 批量改名工具完全指南:下载、安装与实战使用教程
  • 2025年知名的东莞平板硫化机厂家推荐及选购指南
  • 2025年11月移民美国机构推荐榜:专业服务助力高净值家庭实现身份规划
  • 深入解析:《C++ 继承》三大面向对象编程——继承:派生类构造、多继承、菱形虚拟继承概要
  • 2025年11月移民美国机构推荐榜单及对比分析
  • 2025年评价高的垃圾袋TOP实力厂家推荐榜
  • 2025年评价高的平面充磁品牌厂家排行榜
  • 某中心在旧金山设立AI实验室专注长期研究
  • 2025年知名的内嵌保险柜厂家最新权威推荐排行榜
  • 2025年比较好的泡沫箱TOP品牌厂家排行榜
  • 2025年304不锈钢餐具厂家推荐及采购指南
  • 2025年评价高的智能温控烘箱行业内知名厂家排行榜
  • 2025年比较好的保温管道厂家最新热销排行
  • 2024年智能学院申请考核制博士研究生复试上机测试,考情分析
  • 基于python大数据的特产推荐环境
  • 2025年热门的水泥散装设备厂家最新TOP实力排行
  • 2025年评价高的非标焊接加工品牌厂家排行榜
  • 2025年知名的高抗干扰测力称重工业型导轨式厂家最新TOP排行榜
  • UVa 1660 Cable TV Network - 指南