zoukankan      html  css  js  c++  java
  • Cow Line

    【原题链接】

    【题意说明】

    1~N这N个数字,共有N!种排列顺序!并按字典序对其编号。问题:

    (1)若给定的是一个排列顺序,求其编号;

    (2)若给定编号,求其排列!

    【问题分析】

    此题我处理的很不好!关键是问题(1)处理的不好!

    对于问题(2),

    (1)先预处理a[i]=i!,并令k=1;

    (2)从a[n]开始找到第1个比编号x小的位置j,从第k位到n-j-1位置的值依次从小到大选择未使用的数字;

    (3)对于第n-j这个位置,看x/a[j]的值,再剩下未用的数中选择第x/a[j]大的数;

    (4)令k=n-j+1; x%=a[j];按步骤(2)~(4)再处理x;

    (5)当x==0时结束。

    这样就找到满足问题(1)所要求的结果了!

    对于问题(1),我采用的笨办法是,把问题(1)转换成问题(2),怎么转换的呢!!就是从1~n!,按二分法求出中间数mid,对于这个中间数按问题(2)的方法求出结果,与问题(1)的数据比较,直到找到结果!这里费时太多了!

    其实可以借鉴问题(2)的思路,反过来求就可以了:

    (1)令k=1;s=1;(k为位置,s为编号)

    (2)从k位开始,比较其位置是否对应每个未使用的第k小数,直到不相同;

    (3)计算第k位置的数是剩下数中第x大的数,s+=x*a[n-k];

    (4)继续对后面的位置按步骤(2)~步骤(4)比较,直到所有的位置都比较完成!

    以上对于问题(1)只是思路,程序没有实现(有些懒了!!)

     

  • 相关阅读:
    C++常用工具收集
    Ubuntu禁用触摸板
    Vim简本
    JS原型链模式和继承模式
    JS原型链模式
    JS中的单例模式/工厂模式/构造函数模式(并非完全意义上的设计模式)
    JS中一道关于this和闭包的题
    JS中的this关键字
    JS闭包
    JS作用域和作用域链
  • 原文地址:https://www.cnblogs.com/ahmasoi/p/2780825.html
Copyright © 2011-2022 走看看