一千题,No.0064(螺旋矩阵)

本题要求将给定的 N 个正整数按非递增的顺序,填入“螺旋矩阵”。所谓“螺旋矩阵”,是指从左上角第 1 个格子开始,按顺时针螺旋方向填充。要求矩阵的规模为 m 行 n 列,满足条件:m×n 等于 N;m≥n;且 m−n 取所有可能值中的最小值。

输入格式:

输入在第 1 行中给出一个正整数 N,第 2 行给出 N 个待填充的正整数。所有数字不超过 104,相邻数字以空格分隔。

输出格式:

输出螺旋矩阵。每行 n 个数字,共 m 行。相邻数字以 1 个空格分隔,行末不得有多余空格。

输入样例:

12
37 76 20 98 76 42 53 95 60 81 58 93

输出样例:

98 95 93
42 37 81
53 20 76
58 60 76

 解题思路:

按照题目硬求解,结果三个样例超时了

#include <bits/stdc++.h>using namespace std;int m,n;void func(int a)
{for(int i = sqrt(a)+1;i >= 1;--i){for(int j = i;j >= 1;--j){if(i * j == a){::m = i;::n = j;return;}}}
}int main()
{multiset<int,greater<int>> s;int a;cin >> a;if(a == 1){int num;cin >> num;cout << num;return 0;}else if(a == 0){return 0;}func(a);while(a--){int num;cin >> num;s.insert(num);}int arr[m][n];int check[m][n];memset(arr,0,sizeof(arr));memset(check,0,sizeof(check));pair<int,int> point = {0,0};auto t = s.begin();arr[0][0] = *t;check[0][0] = 1;++t;while(t != s.end()){while(point.second+1 < n && t != s.end() && check[point.first][point.second+1] == 0){arr[point.first][point.second+1] = *t;check[point.first][point.second+1] = 1;++point.second;++t;}while(point.first+1 < m && t != s.end() && check[point.first+1][point.second] == 0){arr[point.first+1][point.second] = *t;check[point.first+1][point.second] = 1;++point.first;++t;}while(point.second-1 >= 0 && t != s.end() && check[point.first][point.second-1] == 0){arr[point.first][point.second-1] = *t;check[point.first][point.second-1] = 1;--point.second;++t;}while(point.first-1 >= 0 && t != s.end() && check[point.first-1][point.second] == 0){arr[point.first-1][point.second] = *t;check[point.first-1][point.second] = 1;--point.first;++t;}}for(int i = 0;i < m;++i){for(int j = 0;j < n;++j){if(j != 0) cout << " ";cout << arr[i][j];}cout << endl;}return 0;
}

后来把set排序改为vector,sort排序依然超时,果断打开柳s的代码,发现不是排序的问题,是m,n的取值函数耗时太大

附上柳s的代码:

for (n = sqrt((double)a); n >= 1; n--){if (a % n == 0) {m = a / n;break;}}

c++代码如下:

#include <bits/stdc++.h>using namespace std;int main()
{vector<int> v;int a;cin >> a;int m,n;for (n = sqrt((double)a); n >= 1; n--){if (a % n == 0) {m = a / n;break;}}while(a--){int num;cin >> num;v.push_back(num);}sort(v.begin(),v.end(),greater<int>());int arr[m][n];int check[m][n];memset(arr,0,sizeof(arr));memset(check,0,sizeof(check));pair<int,int> point = {0,0};auto t = v.begin();arr[0][0] = *t;check[0][0] = 1;++t;while(t != v.end()){while(point.second+1 < n && t != v.end() && check[point.first][point.second+1] == 0){arr[point.first][point.second+1] = *t;check[point.first][point.second+1] = 1;++point.second;++t;}while(point.first+1 < m && t != v.end() && check[point.first+1][point.second] == 0){arr[point.first+1][point.second] = *t;check[point.first+1][point.second] = 1;++point.first;++t;}while(point.second-1 >= 0 && t != v.end() && check[point.first][point.second-1] == 0){arr[point.first][point.second-1] = *t;check[point.first][point.second-1] = 1;--point.second;++t;}while(point.first-1 >= 0 && t != v.end() && check[point.first-1][point.second] == 0){arr[point.first-1][point.second] = *t;check[point.first-1][point.second] = 1;--point.first;++t;}}for(int i = 0;i < m;++i){for(int j = 0;j < n;++j){if(j != 0) cout << " ";cout << arr[i][j];}cout << endl;}return 0;
}

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

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

相关文章

Codesys 获取系统年、月、日、时、分、秒、星期几 +解决时区问题+ ST语言编程实现代码

一、 效果如图所示 二、功能说明 发现获取的时间比北京时间多一个时区&#xff08;8个小时&#xff09;&#xff0c;解决时区问题获取时间后&#xff0c;单独把年月日时分秒提取出来&#xff0c;单独保存在变量中获取星期几&#xff0c;保存在变量中 三、Codesys用ST语言实现…

数字电路运算器分析

文章目录 1. 半加器 2. 加法器 3. 4位加法器 4. 半减器 5. 减法器 6. 4位减法器 1. 半加器 现在我们来考虑如何用电路来实现1位加法。假如有两个1位二进制数A、B&#xff0c;它们的和为1位二进制数S&#xff0c;那么存在下面几种情况&#xff1a; 如果A0&#xff0c;B…

RTC实时时钟

一、Unix时间戳 1、Unix 时间戳 &#xff08;1&#xff09;Unix 时间戳&#xff08;Unix Timestamp&#xff09;定义为从UTC/GMT的1970年1月1日0时0分0秒开始所经过的秒数&#xff0c;不考虑闰秒 &#xff08;2&#xff09;时间戳存储在一个秒计数器中&#xff0c;秒计数器为…

行业分析---揭开新工业革命序幕的英伟达

1 背景 在之前的博客中&#xff0c;笔者撰写了多篇行业类分析的文章&#xff08;科技新能源&#xff09;&#xff1a; 《行业分析---我眼中的Apple Inc.》 《行业分析---马斯克的Tesla》 《行业分析---造车新势力之蔚来汽车》 《行业分析---造车新势力之小鹏汽车》 《行业分析-…

CF988D Points and Powers of Two 题解

题目传送门 题目大意 题目描述 在坐标线上有 n n n 个不同的点&#xff0c;第 i i i 个点的坐标为 x i x_i xi​。选择给定点集的一个子集&#xff0c;使得子集中每对点之间的距离是 2 d 2^d 2d 的整数幂。需要考虑每对点&#xff0c;而不仅仅是相邻的点。注意&#xff0…

如何设置天锐绿盾的数据防泄密系统

设置天锐绿盾的数据防泄密系统&#xff0c;可以按照以下步骤进行&#xff1a; 一、系统安装与初始化 在线或离线安装天锐绿盾数据防泄密系统&#xff0c;确保以管理员身份运行安装包&#xff0c;并按照安装向导的提示完成安装。输入序列号进行注册&#xff0c;激活系统。 二…

AI会淘汰程序员吗?提示词工程师是答案吗?

在科技领域&#xff0c;每两年就会有一个热门概念&#xff0c;吸引大量的人力、物力投入&#xff0c;大数据、区块链、WEB3、5G、元宇宙莫不如此&#xff0c;2023年爆火的AI会是下一个雷声大雨点小的泡沫吗&#xff1f; 这个问题其实不太好回答&#xff0c;在元宇宙兴起初期&a…

汽车传动系统为汽车动力总成重要组成部分 我国市场参与者数量不断增长

汽车传动系统为汽车动力总成重要组成部分 我国市场参与者数量不断增长 汽车系统主要包括动力系统、制动系统、传动系统、转向系统、行驶系统、燃油供给系统、照明系统以及电器系统。汽车传动系统指能够将发动机产生的动力转化为车辆行驶驱动力的动力传递装置。汽车传动系统为汽…

C++数据格式化1 - uint转换成字符串 double转换成字符串

1. 关键词2. strfmt.h3. strfmt.cpp4. 测试代码5. 运行结果6. 源码地址 1. 关键词 C 数据格式化 字符串处理 std::string int double 跨平台 2. strfmt.h #pragma once#include <string> #include <cstdint> #include <sstream> #include <iomanip>…

利用原生HTML + CSS + JS实现歌词滚动

对于很多音乐APP&#xff0c;都有这么一个功能&#xff0c;就是根据歌曲的进度来控制对应的歌词滚动&#xff0c;如下图所示&#xff1a; 大概这样的效果&#xff0c;我此次是使用原生的HTMLCSSJS来实现的&#xff0c;以下是具体的实现过程。 1. 数据获取与处理 对于数据来源&…

40、基于深度学习的线性预测设计(matlab)

1、原理及流程 深度学习的线性预测是一种利用深度神经网络模型进行线性回归预测的方法。其设计原理主要基于神经网络的层次化特性&#xff0c;利用多层感知器&#xff08;MLP&#xff09;等模型进行特征学习和非线性变换&#xff0c;从而提高线性预测的准确性。 设计流程如下…

Siemens-NXUG二次开发-创建平面(无界非关联)、固定基准面[Python UF][20240614]

Siemens-NXUG二次开发-创建平面&#xff08;无界非关联&#xff09;、固定基准面[Python UF][20240614] 1.python uf函数1.1 NXOpen.UF.Modeling.CreatePlane1.2 NXOpen.UF.ModlFeatures.CreateFixedDplane 2.示例代码2.1 pyuf_plane.py 3.运行结果3.1 内部模式3.1.1 NXOpen.UF…

应变玻璃合金是航天产业重要弹性材料 研究开发意义重大

应变玻璃合金是航天产业重要弹性材料 研究开发意义重大 应变玻璃&#xff0c;是一种形状记忆合金&#xff0c;为纳米级材料&#xff0c;其短程有序晶格应变区域呈冻结状态&#xff0c;具有典型的玻璃化转变特征&#xff0c;可以对外界刺激产生应变反应&#xff0c;也称为应变玻…

数据库 | 数据库设计的步骤

1.需求分析 调查机构情况与熟悉业务活动&#xff0c;明确用户的需求&#xff0c;确定系统的边界&#xff0c;生成数据字典和用户需求规格说明书 2.概念结构设计 将从需求分析中得到的用户需求抽象为概念模型&#xff0c;设计E-R模型 3.逻辑结构设计 将E-R图转换为和DBMS相…

【网络编程开发】17.“自动云同步“项目实践

17."自动云同步"项目实践 文章目录 17."自动云同步"项目实践项目简介功能需求需求分析实现步骤 1.实现TCP通信server.c 服务端tcp.hclient.c 客户端 函数封装tcp.ctcp.hserver.cclient.c编译运行 2.实现文件传输sever.cclient.ctcp.ctcp.hMakeifle编译运行…

MES管理系统中的质量管理活动是什么

在制造业的广阔天地中&#xff0c;质量管理如同航船的指南针&#xff0c;指引着产品品质的航行方向。而随着科技的日新月异&#xff0c;MES管理系统在质量管理领域扮演着越来越重要的角色。MES管理系统不仅连接了企业的管理层与车间生产现场&#xff0c;更在质量管理的各个环节…

RS485常见问题及解决方法

RS485常见问题及解决方法 RS485总线是工业上最常用的通信方式之一&#xff0c;在实际布线或使用过程中通常会出现一系列问题&#xff0c;今天总结一些平时RS485通讯可能会出现的通讯问题及其解决方法以供大家参考。 一、什么是RS485&#xff1f; RS485&#xff0c;全称为TIA…

QT(超详细从0开始)

目录 1.2 Qt的优点 2.安装Qt 3.创建项目 4.解读Qt自动生成的代码 ​编辑 5.Qt Designer 6.Qt对象数 7.Qt乱码问题 8.Qt坐标系的认识 9.信号和槽 9.1 connect 9.2 自定义槽函数 9.3 自定义信号 9.4 断开信号链接&#xff08;disconnect&#xff09; 9.5.lambda表…

家庭智能助手:Kompas AI引领家居智能化新纪元

一、引言 在数字化浪潮的推动下&#xff0c;现代家庭生活正迅速向智能化转型。从简单的自动化设备到复杂的智能家居系统&#xff0c;智能技术正悄无声息地改变我们的日常生活。Kompas AI作为一款前沿的家庭智能助手&#xff0c;不仅预示着家庭生活的未来趋势&#xff0c;更以其…

使用 Verdaccio 建立私有npm库

网上有很多方法,但很多没标注nginx的版本所以踩了一些坑,下方这个文档是完善后的,对linux不是很熟练,所以不懂linux不会搭建的跟着做就可以了 搭建方法 首先需要一台云服务器 以139.196.226.123为例登录云服务器 下载node cd /usr/local/lib下载node 解压 下载 wget https://…