AlgoMooc
← 返回题库

K0076. 魔法卷轴排列

中等通过率 25% · 提交 59 · 通过 15
模拟字符串贪心枚举2508

小慕正在开发一个「卷轴展示系统」,系统里存放着成百上千个卷轴名称。他常用 `show` 命令在终端上查看某个分类下的所有卷轴。 然而,卷轴的排列方式有严格的要求:当用户先从上到下浏览、再从左到右浏览时,卷轴名称必须按照字典顺序递增排列。 为了让用户阅读方便,卷轴的展示需满足以下规则: 1. 每行的总字符数不能超过 `viewWidth`。 2. ,并且相邻两列之间必须至少空 2 个空格。 3. 卷轴名称先纵向摆放,再横向排列(即先填满第一列的所有行,再依次填充后续列)。 4. 所有卷轴名称在纵向→横向阅读时,必须是字典序递增的。 小慕的任务是: 给定卷轴展示的最大行宽 `viewWidth` 以及卷轴名称列表 `scrollNames`,计算出展示所有卷轴所需的最少行数。

提示:带虚线的词点一下有通俗解释。

输入描述

* 第一行输入一个整数 `viewWidth`,满足 `30 <= viewWidth <= 200`。 * 第二行输入一个整数 `n`,表示卷轴数量,满足 `1 < n <= 1000`。 * 接下来 `n` 行,每行一个字符串,表示一个卷轴名称 `scrollNames[i]`,满足: * `1 <= len(scrollNames[i]) <= viewWidth` * 只包含字符数字和字母

输出描述

输出一个整数,表示展示所有卷轴所需的最少行数。

示例

示例 1

输入

44
4
FlameOrb20
Crystal9
CrystalC4
EmberStone12

输出

2

说明:将卷轴名称按词典序排序后为: `Crystal9`、`CrystalC4`、`EmberStone12`、`FlameOrb20` 展示效果如下(纵向优先): ``` Crystal9 EmberStone12 CrystalC4 FlameOrb20 ``` 从上到下、再从左到右查看时,顺序为: `Crystal9 → CrystalC4 → EmberStone12 → FlameOrb20`,符合要求。

示例 2

输入

45
10
Altar1
Arcanum3
BeastDen4
BlightWood5
Dragonspire8
EldritchTome2
Moonwell9
ObsidianGate6
PhoenixRoost7
Starfall0

输出

4

说明:排序结果为: `Altar1`、`Arcanum3`、`BeastDen4`、`BlightWood5`、`Dragonspire8`、`EldritchTome2`、`Moonwell9`、`ObsidianGate6`、`PhoenixRoost7`、`Starfall0` 排列如下: ``` Altar1 Dragonspire8 PhoenixRoost7 Arcanum3 EldritchTome2 Starfall0 BeastDen4 Moonwell9 BlightWood5 ObsidianGate6 ```

时间限制 1000 ms · 内存限制 128 MB

看不懂题目?点开图解(训练营专属)

登录后查看题目图解

题目图解为训练营学员专属内容,请先登录。

微信扫码登录还不是训练营学员?了解训练营 →
写完代码点「提交」,将对全部测试用例判题。