给你$n$($n\leq 410^5$)个数,求尽量构成一个最大的矩阵,各行各列不相同。
因为是矩阵$wh=h*w$,我们可以枚举短的那条边$w$,枚举次数=$\sqrt{n}$,然后一个数字$i$如果出现了$cnt_i$,它只能斜着放所以最多放$w$个,这样可以放置的总数就是
暴力枚举$n\sqrt{n}$
然后就是放置,像枚举时候一样斜着放
- 应该先把$cnt_i$最多的先放。
- 枚举时注意$w\leq h$
- 放置时可以直接斜这放,没有放的元素=$ans[i][j+h]$
代码
1 |
|
给你$n$($n\leq 410^5$)个数,求尽量构成一个最大的矩阵,各行各列不相同。
因为是矩阵$wh=h*w$,我们可以枚举短的那条边$w$,枚举次数=$\sqrt{n}$,然后一个数字$i$如果出现了$cnt_i$,它只能斜着放所以最多放$w$个,这样可以放置的总数就是
暴力枚举$n\sqrt{n}$
然后就是放置,像枚举时候一样斜着放
1 | #include <iostream> |