• hdoj-1027-Ignatius and the Princess II(逆康拓展开)


    题目链接

     1 /*
     2     Name:
     3     Copyright:
     4     Author:
     5     Date: 2018/5/2 11:07:16
     6     Description:输出第m小的序列
     7 */
     8 #include <iostream>
     9 #include <cstdio>
    10 #include <vector> 
    11 #include <algorithm>
    12 #include <cstring>
    13 using namespace std;
    14 int  fac[] = {1,1,2,6,24,120,720,5040,40320};//阶乘
    15 //康托展开的逆运算,{1...n}的全排列,中的第k个数为s[]
    16 void reverse_kangtuo(int n,int k,int s[])
    17 {
    18     int i, j, t, vst[1001]={0};
    19     --k;
    20     for (i=0; i<n; i++)
    21     {
    22         if (n-i-1 > 8) {
    23             t = k/fac[8];    
    24         } else {
    25             t = k/fac[n-i-1];
    26         }
    27         for (j=1; j<=n; j++)
    28             if (!vst[j])
    29             {
    30                 if (t == 0) break;
    31                 --t;
    32             }
    33         s[i] = j;
    34         vst[j] = 1;
    35         if (n-i-1 > 8) {
    36             k %= fac[8];
    37         } else {
    38             k %= fac[n-i-1];
    39         }
    40     }
    41 }
    42 
    43 int main()
    44 {
    45     int s[1005] ;
    46     int m, n;
    47     while (cin>>m>>n) {
    48         memset(s, 0, sizeof(s)) ;
    49         reverse_kangtuo(m, n, s);
    50         cout<<s[0];
    51         for (int i=1; i<m; i++) {
    52             cout<<" "<<s[i];
    53         }
    54         cout<<endl;
    55     }
    56     return 0;
    57 }
  • 相关阅读:
    团队项目-需求分析报告
    团队项目-选题报告
    第一次结对编程作业
    第一次编程作业
    第一次作业
    第10组 Beta冲刺(2/4)
    第10组 Beta冲刺(1/4)
    第10组 Alpha冲刺(4/4)
    第10组 团队Git现场编程实战
    第二次结对编程作业
  • 原文地址:https://www.cnblogs.com/langyao/p/8980443.html
Copyright © 2020-2023  润新知