题面

思路

一眼看过去以为NOI2018的题出出来了= =贼吓人

首先,对于这个难度,我们有一个比较明显的结论:

一个序列的难度,等于这个东西:

$hard=max(\sum_{j=i+1}^n[a_j<a_i])(i=1...n)$

也就是一个元素后面的元素比它小的个数的最大值

证明显然,每轮操作只会把它后面的一个东西放到前面来,证毕

统计难度

我们令$f[i][j]$表示长度为$i$的序列难度为$j$的方案数

这个东西好像不太好算,没法确定难度正好为$j$,那我们做一个前缀和,令$F[i][j]$表示难度小于等于$j$的方案数

这个东西可以用组合意义算出来:

$F[i][j]=(j+1)^(i-j)\ast j!(i\geq j)$

$F[i][j]=i!(i < j)$

下面那个比较显然,上面那个的意义是,从最前面开始放,每次都有令上面那个统计序列难度的那个式子的答案在$[0,j]$区间内任选的$j+1$个选择,选到$n-m$个之后后面的就随便放了

然后,我们用$F$表示$f$:$f[i][j]=F[i][j]-F[i][j-1]$

字典序

对于字典序这里,我们依旧是从前往后逐位确定,每次还是枚举后面有多少个比它小的

不难发现,在确定了一个位置的后面有$m$个比它小的以后,后面的就随便放了,每次的方案数是$F[i][m]$

而当还没有这样的位置时,每次处理区间$[t,n]$等价于把$[1,n-t+1]$中的数放进去并满足条件,方案数为$f[t][m]$

这样确定之后,最后再扫一遍确定每个位置的元素是什么就好了

Code

#include<iostream>
#include<cstdio>
#include<algorithm>
#include<cstring>
#define ll long long
using namespace std;
inline ll read(){
ll re=0,flag=1;char ch=getchar();
while(ch>'9'||ch<'0'){
if(ch=='-') flag=-1;
ch=getchar();
}
while(ch>='0'&&ch<='9') re=(re<<1)+(re<<3)+ch-'0',ch=getchar();
return re*flag;
}
ll n,m,k;
ll f[50],g[50],fac[50];
ll qpow(ll a,ll b){
ll re=1;
while(b){
if(b&1) re=re*a;
a=a*a;b>>=1;
}
return re;
}
ll rk[50],vis[50];
int main(){
n=read();m=read();k=read();
ll i,j;
fac[0]=1;
for(i=1;i<=n;i++) fac[i]=fac[i-1]*(ll)i;
for(i=0;i<=n;i++) f[i]=((i<m)?fac[i]:(fac[m]*qpow(m+1,i-m)));
for(i=0;i<=n;i++) g[i]=f[i]-((i<(m-1))?fac[i]:(fac[m-1]*qpow(m,i-m+1)));
ll cur,flag=0;
for(i=1;i<=n;i++){
for(j=1;j<=n-i+1;j++){
if(flag||j==m+1) cur=f[n-i];
else cur=g[n-i];
if(cur>=k){
rk[i]=j;
if(j==m+1) flag=1;
break;
}
else k-=cur;
}
}
for(i=1;i<=n;i++){
cur=0;
for(j=1;j<=n;j++){
cur+=(!vis[j]);
if(cur==rk[i]){
printf("%lld ",j);
vis[j]=1;break;
}
}
}
}

最新文章

  1. SLF4J: Class path contains multiple SLF4J bindings.
  2. css 让内容满屏居中不变形
  3. Object-C Categories和Protocols
  4. 读取XML
  5. Spring+MyBatis实践—工程配置
  6. SWT中Display和Shell是个什么东东
  7. Cocos2d Lua 越来越小样本 内存游戏
  8. [转]gdb 调试 objc
  9. JVM(一)JVM的基本结构
  10. Java中回调函数编写
  11. CSS设计模式
  12. 转载:MySQL看这一篇就够了
  13. Escape HDU - 3605(归类建边)
  14. NEXUS 上传到私仓的SNAPSHOT 包下载不下来
  15. web项目与jsp有关的三个jar的依赖
  16. python学习笔记_week12_mysql
  17. jquery.form.js 使用以及问题(表单异步提交)
  18. hibernate 1对1的关系
  19. 最后一面《HR面》------十大经典提问
  20. asp.net core mvc视频A:笔记4-1.数据验证

热门文章

  1. C/C++程序基础 (十)模板和泛型
  2. HDU 2047 EOF牛肉串
  3. WIN10下解决Failed installing tomcat X service
  4. python导包学习总结
  5. 本地通过VMware Workstation创建虚拟机,配置网络环境
  6. System.gc()日志分析
  7. IntelliJ IDEA 2016 汉化说明:
  8. 猜数字问题 python
  9. ListView, GirldList 等setCurrentItem 不立即刷新
  10. 用Fragment实现如新浪微博一样的底部菜单的切换