Next K Permutation
3457: Next K Permutation
时间限制: 1 Sec 内存限制: 128 MB
提交: 4 解决: 4
[提交] [状态] [讨论版] [命题人:admin]
题目描述
逆序对定义(摘自 wiki):
设 A 为一个有 n 个数字的有序集 (n>1),其中所有数字各不相同。
如果存在正整数 i,j 使得 1≤i<j≤n 而且 Ai>Aj,则 (Ai,Aj) 这一个有序对称为 A 的一个逆序对,也称作逆序。逆序对的数量称作逆序数。
输入
接下来每一行有 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。
来源/分类
题解:详见代码!!!
#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的更多相关文章
- 【LeetCode】60. Permutation Sequence
题目: The set [1,2,3,…,n] contains a total of n! unique permutations. By listing and labeling all of t ...
- 排列 && 组合
最近编程经常遇到需要 排列&&组合(求子集) 的问题:遂整理一下. 1. 数字的排列与组合(递归):O(n!),O(nC(n,k)) * O(n) #include <stdio ...
- S-DES加密
Simplified Data Encryption Standard S-DES 是一个供教学的非安全的加密算法,它与DES的特性和结构类似,但参数小,明文分组为8位,主密钥分组为10位,采用两轮迭 ...
- n数码问题, 全排列哈希
转载了一篇关于全排列的哈希函数,Poj1077就是应用了全排列的哈希: 我们经常使用的数的进制为“常数进制”,即始终逢p进1.例如,p进制数K可表示为 K = a0*p^0 + a1*p^1 + ...
- 全排列的hash
我们经常使用的数的进制为“常数进制”,即始终逢p进1.例如,p进制数K可表示为K = a0*p^0 + a1*p^1 + a2*p^2 + ... + an*p^n (其中0 <= ai < ...
- 解决jqplot与jquery-ui导入必要包时的冲突
解决jqplot与jquery-ui导入必要包时的冲突 对于一个网页中,即要有jqplot的画图,又要有jquery-ui的风格显示! 但在导入必要的包时,出现了问题! 先导入jqplot的必要包: ...
- Inversions After Shuffle
Inversions After Shuffle time limit per test 1 second memory limit per test 256 megabytes input stan ...
- A * B Problem Plus(fft)
题目连接:http://acm.hdu.edu.cn/showproblem.php?pid=1402 hdu_1402:A * B Problem Plus Time Limit: 2000/100 ...
- 简单的字母全排列问题—递归法和STL法
问题描述:求全由小写字母组成的不超过200个字符序列的全排列 如输入序列bbjd,排列结果为: bbdj bbjd bdbj bdjb bjbd bjdb dbbj dbjb djbb jbbd jb ...
随机推荐
- hdu 6288(二分法加精度处理问题)
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=6288 题意:给出a,b,k,n可满足(n^a)*(⌈log2n⌉)^b<=k ,求最大的n值三个 ...
- Linux学习grep,sed,awk工具的使用
1.grep:根据模式搜索文本并将符合模式的文本显示出来(pattern模式:由文本字符和正则表达式元字符所匹配出来的条件) 注:alias grep='grep --color' -c:打印符合要求 ...
- CSS动态伪类选择器温故
动态伪类选择器 伪类选择器:大家熟悉的:[:link][:visited][:hover][:active]CSS3的伪类选择器分为六种:(1)动态伪类选择器(2)目标伪类选择器(3)语言伪类选择器( ...
- RTT设备与驱动之I2C:
I2C主从结构(可以有多个主机,但同一时间只能有一个):I2C有两种地址结构7位/10位 总线空闲时,SDA 和 SCL 都处于高电平状态. 开始信号: SCL 为高电平时,主机将 SDA 拉低 结束 ...
- Textchangedlistener的用法
searchet.addTextChangedListener(new TextWatcher() { @Override public void beforeTextChanged(CharSequ ...
- fuser解决The requested resource is busy
AIX 下出现umount busy | 处理 2011-08-17 17:22:57| 分类: AIX|字号 订阅如果一个文件系统打开了一个文件,那么必须在卸载之前将该文件关闭.例如:# umo ...
- Emacs学习笔记2
emacs的启动初始化 需要有一个~/.emacs文件, 这个和vim一样 emacs中的查找与替换 递增查找 C-s, 在minibuffer中输入即可, 在一次C-s会跳转到下一个 两次C-g取消 ...
- mysql java 通用AES加密
最近有个需求,需要对数据库某些字段加密,调研发现采用AES加密的方式较多,而且反向解密速度快,符合需求,于是采用:下面是遇到的问题及相关代码 首先第一个问题,AES的秘钥是16位,mysql的密码长度 ...
- SEO--HTML meta标签总结
<!DOCTYPE html> <!-- 使用html5 doctype,不区分大小写--> <html lang="zh-CN"> <h ...
- intellijidea课程 intellijidea神器使用技巧 3-1 列操作
Ctrl shift 右箭头 ==> 选中右边单词 ctrl shift alt L ==> 选中所有相同的字符 Ctrl alt L ==> 格式化