给定 \(n \leq 10^7\),求所有 \(n\) 的全排列的逆序对个数的 \(k \leq 100\) 次方和

Solution

\(f[i][j]\) 表示 \(i\) 个元素,逆序对个数为 \(j\) 的全排列个数,则

\[f[i][j]=\sum_{s=0}^{i-1} f[i-1][j-s]
\]

设 \(g[i]\) 为 \(n=i\) 的答案,那么

\[g[i]=\sum_{j=0}^\frac{i(i-1)}{2} f[i][j]\cdot j^k
\]

暴力计算则复杂度 \(O(n^3)\)

然而我们发现 \(g[i]/{i!}\) 是一个 \(2k\) 次多项式,于是我们计算出前 \(2k\) 项然后拉格朗日插值即可

#include <bits/stdc++.h>
using namespace std; #define int long long
const int N = 205;
const int mod = 1e9+7; int qpow(int a,int x) {
int ret=1,nww=a;
while(x) {
if(x&1)ret=ret*nww%mod;
nww=nww*nww%mod;
x>>=1;
}
return ret;
}
int inv(int x) {
return qpow(x,mod-2);
}
int frac(int x) {
int ans=1;
for(int i=2;i<=x;i++) {
ans*=i; ans%=mod;
}
return ans;
} namespace lag {
int n,k,x[N],y[N],ans,s1,s2;
int solve(int _k) {
k=_k;
ans=0;
for(int i=1; i<=n; i++) {
s1=y[i]%mod;
s2=1;
for(int j=1; j<=n; j++) if(i!=j)
s1=s1*((k-x[j])%mod+mod)%mod,s2=s2*((x[i]-x[j]%mod)%mod+mod)%mod;
ans+=s1*inv(s2)%mod;
ans=(ans+mod)%mod;
}
return ans;
}
} int n,k,f[N][N*100],g[N]; signed main() {
cin>>n>>k;
f[0][0]=1;
for(int i=1;i<=min(n,2*k);i++) {
for(int j=0;j<=i*(i-1)/2;j++) {
for(int s=0;s<=i-1;s++) {
f[i][j]+=f[i-1][j-s];
f[i][j]%=mod;
}
g[i]+=f[i][j]*qpow(j,k);
g[i]%=mod;
}
}
if(n<=2*k) cout<<g[n];
else {
for(int i=0;i<=2*k;i++) {
lag::x[i+1]=i;
lag::y[i+1]=(g[i]*inv(frac(i))%mod);
}
lag::n=2*k+1;
cout<<(lag::solve(n)*frac(n)%mod);
}
}

Wannafly Winter Camp 2020 Day 5F Inversion Pairs - 拉格朗日插值,dp的更多相关文章

  1. Wannafly Winter Camp 2020 Day 5C Self-Adjusting Segment Tree - 区间dp,线段树

    给定 \(m\) 个询问,每个询问是一个区间 \([l,r]\),你需要通过自由地设定每个节点的 \(mid\),设计一种"自适应线段树",使得在这个线段树上跑这 \(m\) 个区 ...

  2. Wannafly Winter Camp 2020 Day 7E 上升下降子序列 - 数学

    神奇公式 #include <bits/stdc++.h> using namespace std; #define int long long int n,mod,c[205][205] ...

  3. Wannafly Winter Camp 2020 Day 7D 方阵的行列式 - 数学

    于是去弄了个板子来 #include <bits/stdc++.h> using namespace std; #define int long long const int mod = ...

  4. Wannafly Winter Camp 2020 Day 7A 序列 - 树状数组

    给定一个全排列,对于它的每一个子序列 \(s[1..p]\),对于每一个 \(i \in [1,p-1]\),给 \(s[i],s[i+1]\) 间的每一个值对应的桶 \(+1\),求最终每个桶的值. ...

  5. Wannafly Winter Camp 2020 Day 6J K重排列 - dp

    求 \(K\) 是多少个 \(n\) 元置换的周期.\(T\leq 100, n\leq 50, K \leq 10^{18}\) Solution 置换可以被试做若干个环组成的有向图,于是考虑 dp ...

  6. Wannafly Winter Camp 2020 Day 6I 变大! - dp

    给定一个序列,可以执行 \(k\) 次操作,每次选择连续的三个位置,将他们都变成他们的最大值,最大化 \(\sum a_i\) 需要对每一个 \(k=i\) 输出答案 \(n \leq 50, a_i ...

  7. Wannafly Winter Camp 2020 Day 6H 异或询问 - 二分

    给定一个长 \(n\) 的序列 \(a_1,\dots,a_n\),定义 \(f(x)\) 为有多少个 \(a_i \leq x\) 有 \(q\) 次询问,每次给定 \(l,r,x\),求 \(\s ...

  8. Wannafly Winter Camp 2020 Day 6G 单调栈 - 贪心

    对于排列 \(p\),它的单调栈 \(f\) 定义为,\(f_i\) 是以 \(p_i\) 结尾的最长上升子序列的长度 先给定 \(f\) 中一些位置的值,求字典序最小的 \(p\) 使得它满足这些值 ...

  9. Wannafly Winter Camp 2020 Day 6D 递增递增 - dp,组合数学

    给定两个常为 \(n\) 的序列 \(l_i,r_i\),问夹在它们之间 ( \(\forall i, l_i \leq a_i \leq r_i\) ) 的不降序列的元素总和. Solution 先 ...

随机推荐

  1. AJAX的出现与跨域处理

    XMLHttpRequest JSON AJAX CORS 四个名词来开会 如何发请求 在前端的世界里也逛荡了不少日子了,目前已经get到大约5种发起请求的方式,主流的.非主流的. 何种方式 请求方法 ...

  2. [python]bytes和str

    Python 3.6.1 (v3.6.1:69c0db5050, Mar 21 2017, 01:21:04) [GCC 4.2.1 (Apple Inc. build 5666) (dot 3)] ...

  3. CCF_ 201509-2_日期计算

    水. #include<iostream> #include<cstdio> using namespace std; ] = {{,,,,,,,,,,,,},{,,,,,,, ...

  4. Codeforces 1188B Count Pairs (同余+分离变量)

    题意: 给一个3e5的数组,求(i,j)对数,使得$(a_i+a_j)(a_i^2+a_j^2)\equiv k\ mod\ p$ 思路: 化简$(a_i^4-a_j^4)\equiv k(a_i-a ...

  5. Shell: 定期存档日志文件

    简介 对于日志的分割删除我们一般会使用logratate,但对于项目较多的情况下,会让开发直接将日志分割写在代码里面,对于分割后过期的日志定期删除就很有必要,不然膨胀的日志会占满你的磁盘,将多余的日志 ...

  6. angularJS 传参的四种方法 【修改】

    1. 基于ui-router的页面跳转传参(1) 在AngularJS的app.js中用ui-router定义路由,比如现在有两个页面,一个页面(producers.html)放置了多个produce ...

  7. 从底层入手,解析字节码增强和Btrace应用

    这篇文章聊下字节码和相关的应用. 1.机器码和字节码 机器码(machine code),学名机器语言指令,有时也被称为原生码(Native Code),是电脑的CPU可直接解读的数据. 通常意义上来 ...

  8. 《算法导论》第二章demo代码实现(Java版)

    <算法导论>第二章demo代码实现(Java版) 前言 表示晚上心里有些不宁静,所以就写一篇博客,来缓缓.囧 拜读<算法导论>这样的神作,当然要做一些练习啦.除了练习题与思考题 ...

  9. lwip netbuf

    lwip2.0.2 netbuf_new——分配netbuf结构体的内存. netbuf_alloc,分配netbuf中pbuf内存(pbuf_alloc中PBUF_RAM类型,包括pbuf结构体和p ...

  10. 智和网管平台SugarNMS赋能AI智能化运维

    11月14日,由<网络安全和信息化>和IT运维网联合主办的2019(第十届) IT运维大会上海站在锦荣国际大酒店如期召开.运维领域权威专家.技术领袖.各类运维相关技术产品提供商及服务商共同 ...