题目描述:

loj

题解:

容斥+生成函数。

考虑加入的第$i$个元素对结果的贡献是$[0,i-1]$,我们可以列出生成函数。

长这样:$(1)*(1+x)*(1+x+x^2)*……*(1+x+x^2+……+x^{n-1})=\frac{\prod_{i=1}^{n}1-x^i}{(1-x)^n}$

把分母提出来:$\frac{1}{(1-x)^n} = (1+x+x^2+……)^n = \sum_{i=0}^{k} C_{i+n-1}^{n-1}$,日常小球放盒。

现在还剩$\prod_{i=1}^n 1-x^i$,可以考虑将该式理解为从$1$到$n$选$i$个数,总和为$j$,对该项系数贡献为$(-1)^i$。

由于从$1$到$n$不重复,可以发现$\sum_{i=1}^{447}>100000$,那么$i \le 447$。

那么就可以$dp$了。状态为$f[i][j]$,表示当前选了$i$个数总和为$j$,且最后一项不大于$n$的方案数。

要求选数不重复怎么办?

考虑将其构造成一个上升序列。我们用枚举差值的思想,保证前后差值大于$0$。

转移有三种:

1.将$i$个数集体+1,此时$f[i][j]+=f[i][j-i]$;

2.将$i$个数集体+1再在最前面加入一个1,此时$f[i][j]+=f[i-1][j-i]$;

3.考虑我们每次都让每个数+1,所以当$j>n$时会出现最后一项为$n+1$的情况,此时$f[i][j]-=f[i-1][j-n-1]$;

这样转移就可以了。

最后卷积卷出第$k$位的值就可以了。

代码:

#include<cstdio>
#include<cstring>
#include<algorithm>
using namespace std;
typedef long long ll;
const int MOD = 1000000007;
const int N = 100050;
const int M = 450;
int fastpow(int x,int y)
{
int ret = 1;
while(y)
{
if(y&1)ret=1ll*ret*x%MOD;
x=1ll*x*x%MOD;y>>=1;
}
return ret;
}
template<typename T>
inline void Mod(T&x){if(x>=MOD)x-=MOD;}
int n,m;
int jc[N<<1],jny[N<<1],f[M][N];
void init()
{
jc[0] = 1;
for(int i=1;i<=n+m;i++)jc[i]=1ll*jc[i-1]*i%MOD;
jny[n+m] = fastpow(jc[n+m],MOD-2);
for(int i=n+m;i;i--)jny[i-1]=1ll*jny[i]*i%MOD;
}
int C(int x,int y){return 1ll*jc[x]*jny[y]%MOD*jny[x-y]%MOD;} int main()
{
scanf("%d%d",&n,&m);
init();
f[0][0] = 1;
for(int i=1;i<M;i++)for(int j=i;j<=m;j++)
{
Mod(f[i][j] = f[i-1][j-i]+f[i][j-i]);
if(j>n)Mod(f[i][j]+=MOD-f[i-1][j-n-1]);
}
int ans = 0;
for(int i=0;i<=m;i++)
{
int tmp = 0;
for(int j=0;j<M;j++)
if(j&1)Mod(tmp+=MOD-f[j][i]);
else Mod(tmp+=f[j][i]);
Mod(ans+=1ll*tmp*C(n+m-i-1,n-1)%MOD);
}
printf("%d\n",ans);
return 0;
}

loj6077. 「2017 山东一轮集训 Day7」逆序对的更多相关文章

  1. LOJ6077「2017 山东一轮集训 Day7」逆序对 (生成函数+多项式exp?朴素DP!)

    题面 给定 n , k n,k n,k ,求长度为 n n n 逆序对个数为 k k k 的排列个数,对 1 e 9 + 7 \rm1e9+7 1e9+7 取模. 1 ≤ n , k ≤ 100   ...

  2. 【LOJ6077】「2017 山东一轮集训 Day7」逆序对 生成函数+组合数+DP

    [LOJ6077]「2017 山东一轮集训 Day7」逆序对 题目描述 给定 n,k ,请求出长度为 n的逆序对数恰好为 k 的排列的个数.答案对 109+7 取模. 对于一个长度为 n 的排列 p ...

  3. loj #6077. 「2017 山东一轮集训 Day7」逆序对

    #6077. 「2017 山东一轮集训 Day7」逆序对   题目描述 给定 n,k n, kn,k,请求出长度为 n nn 的逆序对数恰好为 k kk 的排列的个数.答案对 109+7 10 ^ 9 ...

  4. 「2017 山东一轮集训 Day7」逆序对

    题解: 满满的套路题.. 首先显然从大到小枚举 然后每次生成的逆序对是1----(i-1)的 这样做dp是nk的 复杂度太高了 那我们转化一下问题 变成sigma(ai   (ai<i)  )= ...

  5. 题解 「2017 山东一轮集训 Day7」逆序对

    题目传送门 Description 给定 $ n, k $,请求出长度为 $ n $ 的逆序对数恰好为 $ k $ 的排列的个数.答案对 $ 10 ^ 9 + 7 $ 取模. 对于一个长度为 $ n ...

  6. LOJ #6119. 「2017 山东二轮集训 Day7」国王

    Description 在某个神奇的大陆上,有一个国家,这片大陆的所有城市间的道路网可以看做是一棵树,每个城市要么是工业城市,要么是农业城市,这个国家的人认为一条路径是 exciting 的,当且仅当 ...

  7. loj6119 「2017 山东二轮集训 Day7」国王

    题目描述 在某个神奇的大陆上,有一个国家,这片大陆的所有城市间的道路网可以看做是一棵树,每个城市要么是工业城市,要么是农业城市,这个国家的人认为一条路径是 exciting 的,当且仅当这条路径上的工 ...

  8. loj #6079. 「2017 山东一轮集训 Day7」养猫【最大费用最大流】

    首先假设全睡觉,然后用费用流考虑平衡要求建立网络流 把1~n的点看作是i-k+1~k这一段的和,连接(i,i+k,1,e[i]-s[i]),表示把i改成吃饭,能对i~i+k-1这一段的点产生影响:然后 ...

  9. LOJ6079「2017 山东一轮集训 Day7」养猫

    养ImmortalCO k可重区间问题 的增强版:有上下界! 直接都选择s[i],然后再把一些调整到e[i] 考虑通过最大流的“最大”,使得至少每k个有me个e, 通过最大流的“上界”,限制每k个最多 ...

随机推荐

  1. Solution -「HDU 6875」Yajilin

    \(\mathcal{Description}\)   Link.(HDU 裂开了先放个私链 awa.)   在一个 \(n\times n\) 的方格图中,格子 \((i,j)\) 有权值 \(w_ ...

  2. ESXI 7.0.0 U2 部署

    文章目录 什么是ESXI? ESXi 的优势 功能特性 部署ESXI 创建虚拟机 开始安装 打开浏览器输入ip进行管理 什么是ESXI? ESXI官网:https://www.vmware.com/c ...

  3. Vue2.0源码学习(3) - 组件的创建和patch过程

    组件化 组件化是vue的另一个核心思想,所谓的组件化就,就是说把页面拆分成多个组件(component),每个组件依赖的css.js.图片等资源放在一起开发和维护.组件是资源独立的,在内部系统中是可以 ...

  4. Zookeeper开源客户端Curator之创建会话

    前面Zookeeper的链接使用的都是其提供的原生代码,实际开发过程中非常底层的细节开发工作如连接重连,反复注册等耗费开发人员大量的工作精力并且重复工作.而开源客户端Curator的出现解决了该类问题 ...

  5. kubernetes集群之Pod说能不能让我体面的消亡呀?

    kubernetes集群之Pod说能不能让我体面的消亡呀? 由于 Pod 所代表的是在集群中节点上运行的进程,当不再需要这些进程时允许其体面地终止. 1.如果 preStop 回调所需要的时间长于默认 ...

  6. sql注入之报错注入and boolean注入

    1.sql注入之报错注入 正常传参,返回页面正常: 加入'  返回页面报错,出现"zhangsan"' 报错注入使用的函数 在这里我们使用 select updatexml(1,c ...

  7. m0n0wall安装教程

    m0n0wall的镜像链接:https://pan.baidu.com/s/1soIw7cS1Tv180fbo2655UA 提取码:dpon 一.新建虚拟机 新建虚拟机我想大家都会,详细步骤我就不陈述 ...

  8. BI驾驶舱是什么?BI管理驾驶舱主要内容及特点

    BI驾驶舱,顾名思义就是商业智能中让企业管理者对企业的管理能够找到在飞机或汽车驾驶舱里面的驾驶感觉.BI管理驾驶舱系统是专为企业管理层设计的BI分析系统,,是为企业高层打造的虚拟办公场景,有利于更好地 ...

  9. 一个简单的性能计数器:CodeTimer

    public static class CodeTimer { public static void Initialize() { Process.GetCurrentProcess().Priori ...

  10. python3中collections模块(转)

    https://www.cnblogs.com/zhangxinqi/p/7921941.html