构造题

news/2024/12/18 11:41:49/文章来源:https://www.cnblogs.com/f2021ljh/p/18614475

构造不会一点。

填数游戏(241215 热身赛)

有一个 \(n\times m\) 的矩阵,将 \(1,2,\cdots,n\times m\) 填入矩阵中,满足:

  • 每个位置恰好填入一个数字;
  • \(1,2,\cdots,n\times m\) 中每个数字恰好出现一次;
  • 矩阵每一行数字的和都不是质数,每一列数字的和都不是质数。

输出构造的 \(n\times m\) 矩阵,无解输出 \(\texttt{-1}\)

\(1\le n,m\le1000\)

首先考虑简单的情况:若 \(n=1\)\(m=1\) 则无解,但是 \(n=m=1\) 时有解,即输出一个 \(\texttt1\)

另外,显然 \(n,m\) 的顺序不影响答案,只需考虑 \(n<m\) 的情况,\(n>m\) 的情况输出转置即可。

观察所给的样例:\(n=2,m=3\),构造矩阵 \(\begin{pmatrix}1&2&3\\5&4&6\end{pmatrix}\)。猜想这样的构造方式是把原本自然排列的矩阵 \(\begin{pmatrix}1&2&3\\4&5&6\end{pmatrix}\) 稍微调整得来的。先考虑 \(n=2\) 的情况。

容易想到,如果让所有列的和都是偶数,那么就可以满足列的条件了。而偶数 = (偶 + 偶) 或者 (奇 + 奇),因此把上下的奇偶错开即可。对于最后一列,分别是 \(m\)\(2m\),因此不用动。

进一步地,如果 \(m\) 是偶数,那么第一行:奇偶奇偶…,第二行:奇偶奇偶…,因此直接输出 \(\begin{pmatrix}1&2&\cdots &m\\m+1&m+2&\cdots&2m\end{pmatrix}\) 即可。

如果 \(m\) 是奇数,正如上面所说,最后一列不用调整,只需调整前 \(m-1\) 列,那么将

  • 第一行:奇偶奇偶…奇偶 \(m\)
  • 第二行:偶奇偶奇…偶奇 \(2m\)

改为

  • 第一行:奇偶奇偶…奇偶 \(m\)
  • 第二行:奇偶奇偶…奇偶 \(2m\)

即可。

对于 \(n>2\) 的情况,输出自然排列即可,这是因为第 \(i\) 行的和 \(\dfrac12m(m+1)\cdot i\) 和第 \(j\) 列的和

\[\dfrac12n(n-1)m+nj=\dfrac12n[(n-1)m+2j] \]

一定都是合数。

代码:

点击查看代码
#include <bits/stdc++.h>
#define f(x, y, z) for (int x = (y); x <= (z); ++x)
using namespace std;
int const N = 1e3 + 10;
int n, m, a[N][N];signed main() {cin >> n >> m;if (n == 1 && m == 1) return cout << "1\n", 0;if (n == 1 || m == 1 || (n == 2 && m == 2)) return cout << "-1\n", 0;int nn = max(n, m), mm = min(n, m);if ((n == 2 || m == 2) && (nn % 2 == 1)) {f(j, 1, nn) a[1][j] = j;f(j, 1, nn - 2) a[2][j] = nn + j + 1;a[2][nn - 1] = nn + 1;a[2][nn] = nn + nn;} else f(i, 1, mm) f(j, 1, nn) a[i][j] = nn * (i - 1) + j;if (n < m) f(i, 1, mm) {f(j, 1, nn) cout << a[i][j] << ' ';cout << '\n';} else f(i, 1, nn) {f(j, 1, mm) cout << a[j][i] << ' ';cout << '\n';}return 0;
}

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

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

相关文章

Linux服务器中ping时出现“未知的名称或服务”或“Name or service not known”的解决办法

ping qyapi.weixin.qq.com Name or service not known【背景】接入企业微信时遇到服务器上ping qyapi.weixin.qq.com,报错Name or service not known 【解决办法】 1、# vi /etc/resolv.conf 增加一行 nameserver 8.8.8.82、重启网络 # service network restart3、验证ping成功…

组件 画线渲染 拖尾

了解属性 挂载脚本 还可以设置开始颜色宽度结束颜色等补充

画线渲染 拖尾

了解属性 挂载脚本 补充

LLaMA (以LLaMA2为例,文末附加对比1 2 3 三个版本的变化)

一、背景 LLaMA 2 和 LLaMA2-Chat 参数规模:70亿、130亿和700亿 数据和训练规模: 上下文长度 训练资源 性能表现: 二、预训练 pretraining 1. 预训练数据训练语料来自公开课用的数据源,不包括Meta的产品或服务数据在2万亿个数据tokens上进行了训练对真实的数据源进行…

手把手教会你电脑端如何长截屏~

如果在电脑端想拿到这样的长截图,教你一个方法,不需要下载软件 首先需要先下载一个小插件 需要下载滚动截屏所需的插件 然后解压 zip 包 下载好插件后,对 .zip 包进行解压,解压后文件夹里面有个 .crx 后缀的离线安装包,大致如下图所示:打开扩展程序管理菜单 接下来,打开…

实时同步,精准执行!高效电商团队必备协作术

随着电商行业的迅猛发展,运营团队日常工作节奏变得愈发紧张。从上新规划、活动策划到商品数据分析、客服反馈跟进,各个环节的任务交接与流程协作逐渐成为团队效率的瓶颈。尤其是在多人并行的项目中,沟通不畅、文档版本混乱、任务分配模糊等问题层出不穷,稍有不慎,就可能导…

【运维自动化-作业平台】如何使用全局变量之命名空间类型?

命名空间类型的全局变量主要适用场景是同一批主机在多个步骤间需要传递独立的变量值,比如内网ip、hostame,每台主机都是不同的变量值。而字符串变量是全局针对所有主机所有步骤都是一样的变量值。实操演示 例:定义一个local_ip的命名空间变量,目标两台机器,然后添加两个执…

智改数转,物联网创业者有哪些商业机会?

《智改数转,物联网创业者有哪些商业机会》 在当前的数字化转型浪潮中,“智改数转”(智能化改造和数字化转型)已成为企业发展的新趋势。物联网(IoT)作为这一转型的核心技术之一,为创业者提供了丰富的商业机会。以下是物联网创业者可以把握的几个关键商业机会: 1. 设备制…

中小团队必备工具:如何用协同管理软件提高效率

一、中小团队面临的工作效率挑战 中小团队通常面临以下几个主要的工作效率问题: 1.1 资源有限,工作繁重 与大型企业相比,中小团队往往资源有限,人员紧张,团队成员往往需要身兼数职,处理多种任务。这种情况下,如何有效分配工作、确保每项任务顺利推进,就成为了管理的关键…

【原创】PREEMPT-RT中断线程化原理与中断线程优先级设置

本文介绍实时linux方案PREEMPT-RT提升系统实时性的机制之一--中断线程化,以及中断线程优先级如何配置,希望能对你有所帮助。PREEMPT-RT中断线程化与中断线程优先级设置 目录PREEMPT-RT中断线程化与中断线程优先级设置一、什么是中断线程化1. 普通Linux中断处理2. 实时性的不足…

NPM,可视化的Nginx管理工具

NPM,可视化的Nginx管理工具 前言 NPM,全称:Nginx Proxy Manager,是一款可视化的Nginx的管理工具。众所周知,Nginx的配置文件对于新手尤其是我这样的小白,还是很难上手配置的。虽然说现在可以使用AI,大大降低了理解,配置难度,但是可视化的配置仍然具有很大的优势,极大的…

汽车软件DevOps解决方案

经纬恒润汽车软件DevOps解决方案是专为现代汽车行业设计的一套集成化需求、开发、测试、部署、OTA与监控,旨在加速软件开发流程,提高软件质量和安全性,同时确保整个生命周期的高效性和灵活性。 经纬恒润汽车软件DevOps解决方案是专为现代汽车行业设计的一套集成化需求…