目标是把全部学生分成若干行,每行是严格递增的等差数列,且列数 N 最大。
正确思路:直接“面向 N”检查可行性,而不是让每行随意变长。 做法是对 N 从大到小枚举,检查能否把所有人恰好分成若干条长度恰为 N 的等差序列(不同序列的公差可不同)。
可行性检查(贪心构造):
cnt;每次取当前最小未用身高 a 作为一行的起点;b>a(只从当前还有剩余的高度中挑),设公差 d=b-a,验证序列 {a, a+d, ..., a+(N-1)d} 是否都还各至少有 1 个;若可以,则扣减这些元素的计数,记为一行;d 都不行,则该 N 不可行;某所学校校庆活动,需要将学校学生编排一个方阵。方阵要求:分成 K 行,N 列,每行的同学身高(为整数,如 160 )都成一个递增的等差数列,并且使得 N 最大。
约束:
人数 <=1000 人
输入为学生身高,以 "," + 空格符 隔开,如下:161, 162, 163, 164, 164, 166, 168, 170, 164, 167, 170, 173
lenth:4
[161, 162, 163, 164]
[164, 166, 168, 170]
[164, 167, 170, 173]
输出格式说明====================================================================================================
1、第一行输出改方阵的最大列,即 N 的值,格式为关键字(“lenth") + 2个空格符+结果,如下:
lenth:4---注意空格
2、输出方阵每一行,如下:
[161, 162, 163, 164]
[164, 166, 168, 170]
[164, 167, 170, 173]
输入
161, 162, 163, 164, 164, 166, 168, 170, 164, 167, 170, 173
输出
lenth:4
[161, 162, 163, 164]
[164, 166, 168, 170]
[164, 167, 170, 173]