zoukankan      html  css  js  c++  java
  • 康托展开&&康托逆展开

    展开

     简介:对于给定的一个排列,求它是第几个,比如54321n=5时的第120个。(对于不是1~n的排列可以离散化理解)

     做法: ans=a[n]*(n-1)!+a[n-1]*(n-2)!+~~~~a[1]*0!.(a[n]表示在给定的排列中,还没出现的,而且比当前值小的数的个数)

    如果说对于一个数学定理你会熟练运用,也许已经足够了,但日后总感觉少点什么,好像做了亏心事一般,因为你没有底气去用它,因为你不知道它为什么是对的,所以证明是第一步。

    1.证明:因为是按字典序排序,对于第x个位置数值是a,比它小的有的y个,当前位置是1~y中的任意一个,对剩下位置进行全排列也比当前位置是a小,然后累加就是比它小的数的个数,然后加1就是排列p是第几个,证毕。

    康托逆展开

    简介:给定它是第几个,求这个排列,比如求n=5时的第120个是54321(对于不是1~n的排列可以离散化理解)

    做法:就举上面那个例子吧。

    120-1,即120-1=119

    119/4==4.......23  比它小的(还没出现)4个,故为5

    23/3!==3....5   比它小的(还没出现)3个,故为4

    5/2!==2....1   比它小的(还没出现)2个,故为3

    1/1!==1....0   比它小的(还没出现)1个,故为0

    0/0!==0....0   比它小的(还没出现)0个,故为1

    故为54321

  • 相关阅读:
    洛谷P2402 奶牛隐藏
    BZOJ2150: 部落战争
    HDU 6405 Make ZYB Happy(广义SAM)
    CodeForces
    2019CCPC秦皇岛 E题 Escape(网络流)
    2019CCPC秦皇岛D题 Decimal
    2019CCPC秦皇岛I题 Invoker(DP)
    2019CCPC秦皇岛 F Forest Program
    2019CCPC秦皇岛 J MUV LUV EXTRA(KMP)
    2019CCPC秦皇岛 K MUV LUV UNLIMITED(博弈)
  • 原文地址:https://www.cnblogs.com/war1111/p/7344627.html
Copyright © 2011-2022 走看看