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. thinkphp引入模板view

    3.1 模板放在哪儿? 放在模块的view目录下并且每个控制器的模板,要在与控制器同名的目录下. 以 index.php/Home/User/add则对应的模板在 /Home/view/User/ad ...

  2. vue懒加载 路由 router 的编写(resolve)

    如果用import引入的话,当项目打包时路由里的所有component都会打包在一个js中,造成进入首页时,需要加载的内容过多,时间相对比较长.当你用require这种方式引入的时候,会将你的comp ...

  3. 2.2 Rust 数据类型

    2.2 数据类型 let guess: u32 = "42".parse().expect("Not a number!"); Rust has four pr ...

  4. 2019.03.19 读书笔记 string与stringbuilder的性能

    1 string与stringbuilder 并不是stringbuilder任何时候都在性能上占优势,在少量(大约个位数)的字符串时,并不比普通string操作快. string慢的原因不是stri ...

  5. 386. Lexicographical Numbers 把1--n按字典序排序

    https://leetcode.com/problems/lexicographical-numbers/description/ 前20个是 1, 10, 11, 12, 13, 14, .... ...

  6. 如何解释kworker线程的名称

    http://www.kbase101.com/question/24502.html 在Linux 3.11.0-13上 - 在双插槽Xeon X5650六核板上运行的通用,htop显示不同的kwo ...

  7. [转]Tetris(俄罗斯方块) in jQuery/JavaScript!

    本文转自:http://pwwang.com/2009/10/25/tetris-in-jquery-javascript/ All in jQuery/JavaScript + HTML! Demo ...

  8. empty,isset,is_null比较(差异与异同)

    做php开发时候,想必在使用:empty,isset,is_null  这几个函数时候,遇到一些问题.甚至给自己的程序带来一些安全隐患的bug.很多时候,对于isset,empty都认为差不多.因此开 ...

  9. 基础10 多进程、协程(multiprocessing、greenlet、gevent、gevent.monkey、select、selector)

    1.多进程实现方式(类似于多线程) import multiprocessing import time,threading def thread_run():#定义一个线程函数 print(&quo ...

  10. [HZOI 2015]树黑白

    [题目描述] 给定一棵树,要求维护以下操作: 1.M u 将u节点反色 2.Q u 查询u到所有黑色节点距离和 [输入格式] 第一行n,m 表示节点总数和操作次数 之后n-1行,每行u,v表示两个端点 ...