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. java——链表映射 LinkedListMap

    好像也不是基于链表来实现的,而是采用与链表类似的节点形式重新定义了一个节点内部类,以此来实现映射 public class LinkedListMap<K, V> implements M ...

  2. 爬虫(GET)——爬baidu.com主页

    工具:python3 目标:www.baidu.com 工作流程: 1)反爬虫第一步:抓包工具fiddler抓取页面请求信息,得到User-Agent的值,用于重构urllib.request.Req ...

  3. ETL的两种架构(ETL架构和ELT架构)

     ETL ETL,是英文 Extract-Transform-Load 的缩写,用来描述将数据从来源端经过抽取(extract).转换(transform).加载(load)至目的端的过程.ETL一词 ...

  4. 前端技巧-w3c

    1.使用全等===比较符 if (zeroAsAString === 0) { // 判断为false }在和null进行比较的时候,允许使用 == 比较符 2.使用 .parseInt() 的时候, ...

  5. golang变量

    一.变量的概念 变量是程序的基本组成单位.变量表示内存中的一个存储区域,该区域有自己的名称(变量名)和类型(数据类型).变量相当于内存中一个数据存储空间的表示,你可以把变量看做是一个房间的门 牌号,通 ...

  6. maya 安装失败

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

  7. Java基础05-运算符

    1.赋值运算符:= 2.算术运算符: (1)一元运算符: i++;先使用后自身加1  int i=1;int b=i+1; b=1  i=2 ++i;先对自身加1后使用 int j=1;int b=+ ...

  8. db2 存储过程参数传递--字段类型转换产生的问题

    修改之前的脚本 select count(*) from dbdk.dtdkg010 A left join DBDK.DTDKG070 D ON D.PAY_NO = A.PAY_NO LEFT J ...

  9. Java方法-对指定信息基于相关维度进行分组

    近期项目中需要针对多种不同来源指定的相同类型内容进行合并,实现过程中需要根据指定的相关维度,对资源内容进行分组,如识别是否可以为同一人员信息,是否为同一个歌曲或影视信息,因此针对实现的具体细节做如下备 ...

  10. Windows 入门杂乱无章版

    windows入门 /users/username/appdata/roaming/microsoft/windows/start menu/startup目录中的应用程序是在该用户登录时启动的 /w ...