语文班开课了

P1061 [NOIP2006 普及组] Jam 的计数法

https://www.luogu.org/problemnew/show/P4168 这种题更适合您
by memset0 @ 2018-09-25 14:56:26


摘自某贴吧 ``` 已知一个排列,求升序条件下这个排列的下一个排列。 为方便叙述,我们用数字代替题中的字母。 我们来看一个例子: 假设共 7 个数字,当前排列为: 12345 易得下个排列为最后一位加一,即: 12346 它的下个排列还是最后一位加一: 12347 这时,由于最后一位已经不能再加,就必须“进位”,在不考虑最后一位数字的情况下,倒数第二位加一: 1235_ 这时最后一位设为可取的最小值,即4: 12354 下一次,由于 5 不能再取,最后一位变成6: 12356 …… 等到这个排列时: 12376 最后一位不能再加了,倒数第二位也不能再加了,于是忽略这两位,倒数第三位加一: 124__ 后面两位怎样才能最小?显然,应为可用的数中最小的两个数从小到大排列,即: 12435 至此,我们的算法已经浮出水面: 每次给排列的最后一位加一(已有的数跳过),当最后一位不能再加时,忽略最后一位,倒数第二位加一,最后一位变成可取的最小值;最后两位都不能加时,忽略倒数两位,倒数第三位加一,再将倒数两位变成最小可取两数并由小到大排列……以此类推,直到输出5个排列或整个排列无法再增加。 算法的时空复杂度均为 O(n)。 ```
by lyb666666 @ 2018-10-29 19:19:06


~~ssss~~
by 面壁者4号 @ 2019-07-24 22:29:14


这道题表述的不太好,应该强调一下“数中每个字母不能相同”那里并且举个不合法的反例之类的。
by JTan @ 2019-08-10 19:02:21


@[lyb666666](/space/show?uid=33912) 12354好像不行吧,看题目描述第二段第三句(一个逗号算一句的第三句),12376同理
by MC方块人 @ 2019-08-29 10:18:22


考古
by H3PO4 @ 2020-09-05 22:01:35


@[gzmiller](/user/178437) 考古
by Habseligkeit @ 2021-07-27 15:12:18


|