3457: Next K Permutation

时间限制: 1 Sec  内存限制: 128 MB
提交: 4  解决: 4
[提交] [状态] [讨论版] [命题人:admin]

题目描述

n 个数有 n! 种全排列情况,对所有排列排序后求第 L 个到第 R 个排列中逆序对数量之和。
逆序对定义(摘自 wiki):

设 A 为一个有 n 个数字的有序集 (n>1),其中所有数字各不相同。
如果存在正整数 i,j 使得 1≤i<j≤n 而且 Ai>Aj,则 (Ai,Aj) 这一个有序对称为 A 的一个逆序对,也称作逆序。逆序对的数量称作逆序数。

输入

第一行 case 数量 T。
接下来每一行有 3 个数,n,L,R (3≤n≤12,1≤L≤R≤109)。

输出

输出逆序对总数。

样例输入

复制样例数据

3
3 3 5
6 720 720
8 14625 17743

样例输出

5
15
38745

提示

样例 1 说明:
3 个数所有排列排序后及其逆序对个数:
    (1,2,3): 0;
    (1,3,2): 1;
    (2,1,3): 1;
    (2,3,1): 2;
    (3,1,2): 2;
    (3,2,1): 3.
第 3 个到第 5 个排列逆序对数量之和为 1+2+2=5。

来源/分类

2017 华东理工上海高校邀请赛

题解:详见代码!!!

 #include <bits/stdc++.h>
using namespace std;
typedef long long ll;
ll jie_cheng[],ni_xu_shu[];
void init()
{
jie_cheng[]=ni_xu_shu[]=ni_xu_shu[]=;
jie_cheng[]=;
for(ll i=;i<=;i++)
{
jie_cheng[i]=jie_cheng[i-]*i;
ni_xu_shu[i]=jie_cheng[i-]*((i-)*i/)+ni_xu_shu[i-]*i;//长度为i的序列(每个数字都不同)所有排列的逆序数总和
}
}
ll solve(int n,ll k)
{
ll res=;
int prefix[];
for(int i=;i<=n;i++)//枚举前缀长度
{
for(int j=;j<=n;j++)//枚举前缀元素
{
bool flag=true;
for(int s=;s<i;s++)
{
if(prefix[s]==j)//出现过的元素就不能再出现
{
flag=false;
break;
}
}
if(!flag) continue;
prefix[i]=j;
if(k<jie_cheng[n-i]) break;
else
{
k-=jie_cheng[n-i];
res+=ni_xu_shu[n-i];
ll cnt=;
for(int s=;s<=i;s++)
{
for(int l=s+;l<=i;l++)
{
if(prefix[s]>prefix[l])
{
cnt++;
}
}
}
int tmp[];
for(int s=;s<=n;s++) tmp[s]=;
for(int s=;s<=i;s++) tmp[prefix[s]]=;
for(int s=;s<=n;s++)
{
for(int l=;l<=s;l++)
{
if(tmp[s]== && tmp[l]==)
cnt++;
}
}
res+=jie_cheng[n-i]*cnt;
}
}
}
return res;
}
int main()
{
init();
int t;
scanf("%d",&t);
while(t--)
{
int n;
ll l,r;
scanf("%d %lld %lld",&n,&l,&r);
printf("%lld\n",solve(n,r)-solve(n,l-));
}
return ;
}

Next K Permutation的更多相关文章

  1. 【LeetCode】60. Permutation Sequence

    题目: The set [1,2,3,…,n] contains a total of n! unique permutations. By listing and labeling all of t ...

  2. 排列 && 组合

    最近编程经常遇到需要 排列&&组合(求子集) 的问题:遂整理一下. 1. 数字的排列与组合(递归):O(n!),O(nC(n,k)) * O(n) #include <stdio ...

  3. S-DES加密

    Simplified Data Encryption Standard S-DES 是一个供教学的非安全的加密算法,它与DES的特性和结构类似,但参数小,明文分组为8位,主密钥分组为10位,采用两轮迭 ...

  4. n数码问题, 全排列哈希

    转载了一篇关于全排列的哈希函数,Poj1077就是应用了全排列的哈希: 我们经常使用的数的进制为“常数进制”,即始终逢p进1.例如,p进制数K可表示为    K = a0*p^0 + a1*p^1 + ...

  5. 全排列的hash

    我们经常使用的数的进制为“常数进制”,即始终逢p进1.例如,p进制数K可表示为K = a0*p^0 + a1*p^1 + a2*p^2 + ... + an*p^n (其中0 <= ai < ...

  6. 解决jqplot与jquery-ui导入必要包时的冲突

    解决jqplot与jquery-ui导入必要包时的冲突 对于一个网页中,即要有jqplot的画图,又要有jquery-ui的风格显示! 但在导入必要的包时,出现了问题! 先导入jqplot的必要包: ...

  7. Inversions After Shuffle

    Inversions After Shuffle time limit per test 1 second memory limit per test 256 megabytes input stan ...

  8. A * B Problem Plus(fft)

    题目连接:http://acm.hdu.edu.cn/showproblem.php?pid=1402 hdu_1402:A * B Problem Plus Time Limit: 2000/100 ...

  9. 简单的字母全排列问题—递归法和STL法

    问题描述:求全由小写字母组成的不超过200个字符序列的全排列 如输入序列bbjd,排列结果为: bbdj bbjd bdbj bdjb bjbd bjdb dbbj dbjb djbb jbbd jb ...

随机推荐

  1. 读书笔记:编程小白的第一本python入门书

    书名:编程小白的第一本python入门书 作者:侯爵 出版社/出处:图灵社区 年份:2016年 封面: 感想: 本书短小精悍,精华部分在于给编程小白打了鸡血的同时输出了一种“高效学习法的思想”. 个人 ...

  2. Nmap工具使用

    Nmap是一款网络扫描和主机检测的非常有用的工具. Nmap是不局限于仅仅收集信息和枚举,同时可以用来作为一个漏洞探测器或安全扫描器.它可以适用于winodws,linux,mac等操作系统.Nmap ...

  3. 2018.6.1学习CSS5里顺丰盒子小问题

    在制作下面这样的小盒子时 编写的代码 首先要对li元素设置浮动. 在设置这个li元素下面的a元素时, 因为没有转行内块,inline-block,结果显示出来的页面,鼠标在经过这个选择时(:hover ...

  4. team foundation server 工具的使用

    1.打开TFS工具点击创建集合,填写集合名称,下一步,按照步骤一步一步的往下操作. 2.创建完集合以后,打开VS工具,如下图,在主页上左键选择新建团队项目. 3.选择团队项目,然后选择新建的项目集合和 ...

  5. inventor安装失败怎样卸载安装inventor 2018?

    AUTODESK系列软件着实令人头疼,安装失败之后不能完全卸载!!!(比如maya,cad,3dsmax等).有时手动删除注册表重装之后还是会出现各种问题,每个版本的C++Runtime和.NET f ...

  6. cout和printf不能混用

    1.两者的缓存机制不同:printf无缓冲区,而std::cout有 (其实printf也是有缓冲区的,https://blog.csdn.net/ithzhang/article/details/6 ...

  7. 关于老教授之家项目的思考 && 中国互联网+大赛培训

    最近在做中国互联网+竞赛相关的项目,有一点思考在这里记录下来,算是一份经历,日后可以再回顾,这也是我真正参加的一个大型比赛,作为技术人员可能更多的是从事技术,但是在其他方面能贡献自己的一份力量也是不错 ...

  8. MATLAB矩阵操作和算术运算符

    矩阵的表示 矩阵之间用空格或者是逗号间隔 矩阵可以拼接(可以用矩阵拼接) 实部矩阵和虚部矩阵构成复数矩阵,一一对应. 冒号表达式: 格式: e1:e2:e3 e1表示初始值    e2表示步长   e ...

  9. ubuntu使用ppa源安装最新版本的git

    国内也有ubuntu镜像源.但是里面的git都是1.9版本.最新的已经是2.3了 1 首先使用将ppa源加入Ubuntu,交大家 sudo add-apt-repository ppa:pdoes/p ...

  10. jquery validation yyyy-MM-dd格式日期在ie中无法验证通过

    自己开发的公众号,可以领取淘宝内部优惠券 问题 首先在ie6.7.8下面打开这个页面http://jqueryvalidation.org/date-method/,输入的日期格式为:yyyy-MM- ...