https://www.papamelon.com/problem/11
首先想一下如何获得编号呢? 暴力一定是不可以,所以我们一定要思考一下一个时间复杂度小的算法。
这个排列的编号==它前面的所有的排列数+1
例: 3 2 1
先看第一位是3,比它小的,且目前还没用的数字的有2个分别是 1 2.
那么以 1开头的 2开头的都是它前面的排列 后面还剩余俩数随便的排。 即 22!
接着 3 2 比2小的,且目前还没用的数字的有1个是1.
故 前面的排列是 1
1! 。。。。。以此类推

#include<bits/stdc++.h>
using namespace std;
typedef long long int LL;
const int N=25;
LL f[N];
void init()//预处理阶乘
{f[0]=1;for(int i=1;i<=20;i++) f[i]=f[i-1]*i;
}
void solve()
{int n; cin>>n;vector<int>ve(n+1);vector<int>st(n+1,1);//初始化为1 表示每一个数还没用for(int i=0;i<n;i++) cin>>ve[i];LL skip=0;for(int i=0;i<n;i++){int count=0;for(int j=1;j<=n&&j!=ve[i];j++) if(st[j]) count++;//计算剩余的没用的数比它小的有几个skip+=count*f[n-1-i];//后面的数随便的排st[ve[i]]=0;//编辑为已经用了}cout<<skip+1<<endl;
}
int main(void)
{init();int t; cin>>t;while(t--) solve();return 0;
}

11. 计算排列的编号【组合数学】相关推荐

  1. .NET平台开源项目速览(11)KwCombinatorics排列组合使用案例(1)

    阅读目录 1.KwCombinatorics基本介绍 2.足球彩票排列组合应用 3.排列组合生成代码与测试 今年上半年,我在KwCombinatorics系列文章中,重点介绍了KwCombinator ...

  2. Python超级详细的上台阶楼梯问题,算法运行速度极快,内含计算排列的方法。问题:有n级台阶,每步可以走一级或两级,问有多少种不同的走法。k为传入的参数,默认值为3

    看到此题,我们要回忆一下高中数学的排列组合问题 一.先从一个例子分析一下这个题目('1'是每次上一级台阶,'2'是每次上两级提台阶) 假如有5级台阶,则有(1,1,1,1,1).(1,1,1,2).( ...

  3. 计算排列组合数-python

    使用scipy计算排列组合的具体数值 from scipy.special import comb, permperm(3,2) #计算排列数 6comb(3,2) #计算组合数 3 自己写一个计算排 ...

  4. python计算排列数 组合数

    组合排列介绍 一.编写函数计算组合数CniC^{i}_{n}Cni​. def Combinatorial(n,i):'''设计组合数'''#n>=iMin=min(i,n-i)result=1 ...

  5. 计算排列组合C(n,k)

    通过归纳法可得:C(n,k)=C(n-1,k-1)+C(n-1,k) 所以通过数组填表可以得到一个表格,其值代表组合数. //计算排列组合C(n,k)=C(n-1,k-1)+C(n-1,k) int ...

  6. R语言使用choose函数计算排列组合:组合数(输入两个参数、combination)

    R语言使用choose函数计算排列组合:组合数(输入两个参数.combination) 目录 R语言使用choose函数计算组合数(输入两个参数.combination) R 语言特点 R语言使用ch ...

  7. python计算排列组合数

    一.编写函数计算组合数 def Combinatorial(n,i):'''设计组合数'''#n>=iMin=min(i,n-i)result=1for j in range(0,Min):#由 ...

  8. C语言计算排列数和组合数

    #include <stdio.h> int main(int argc, char *argv[]) {printf("%d \n",a(3,8));printf(& ...

  9. c++11:计算时间差(毫秒)

    C++11下计算时间差(毫秒)要用到chrono时间库,以下是示例代码,我从en.cppreference.com上抄来改的. #include <iostream> #include & ...

最新文章

  1. 面试那点小事,你从未见过的spring boot面试集锦(附详细答案)
  2. NSMutableString和NSString区别,及相互转换方法
  3. vs2010 问题 LINK : fatal error LNK1123: 转换到 COFF 期间失败: 文件无效或损坏
  4. Oracle闪回原理-Logminer解读redo(r11笔记第17天)
  5. 2021年东港二中高考成绩查询,辽宁省东港二中2021届英语高考模拟试卷1(新课改原创2020版,供2021年课改省份考生使用)...
  6. mfc编程消息机制中消息汇总
  7. P4331-[BalticOI2004]Sequence数字序列【左偏树】
  8. IntelliJ IDEA修改项目的包名_修改包名
  9. 【C++11新特性】 C++11智能指针之unique_ptr
  10. 重学前端----前端知识系统学习推荐专栏
  11. php编写大型网站问题集
  12. 增长量计算n+1原则_资料分析听课笔记
  13. 局域网测试工具、局域网UDP、TCP端口诊断工具
  14. 计算机网络驱动坏了怎么解决办法,网卡驱动异常怎么办_网卡驱动异常解决办法_飞翔教程...
  15. 鸟哥Linux学习笔记(从头学习Linux基础)
  16. 百度地图android去除logo,百度地图 Android版 隐藏logo
  17. 案例分享 | 数智化升级:红蜻蜓的转型之路(下)
  18. PHP5.4 如何连接MS Sql Server
  19. python数组定义_python定义数组
  20. python中的内置高阶函数

热门文章

  1. Django发布机器学习服务
  2. notepad++官网地址 https://notepad-plus-plus.org/;notepad++ 官网地址 https://notepad-plus-plus.org/
  3. php怎么判断是个几数组,php如何判断数组是几维
  4. 传智播客实战taotao项目页面菜单栏Tree的Java实现方法
  5. 如何修复word文档
  6. 【Proteus仿真】【51单片机】自动浇花灌溉系统设计
  7. 获取当前月份的上一月月份,下一个月份
  8. 思科模拟器 --- 路由器的基本配置
  9. python刷题软件_教你用python写:HDU刷题神器
  10. 命令修复损坏的Ubuntu系统