题目描述:

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 -「ARC 126E」Infinite Operations

    \(\mathcal{Description}\)   Link.   给定序列 \(\{a_n\}\),定义一次操作为: 选择 \(a_i<a_j\),以及一个 \(x\in\mathbb R ...

  2. tar压缩打包实用命令总结

    一.tar常用命令参数 用法:tar [参数] [文件] -v 显示指令执行过程 -c 创建压缩文件 -x 解压文件 -z 通过gzip指令处理文件 -f 指定文件 -C 解压文件到指定目录 -t - ...

  3. Hadoop分布式集群部署

    环境准备 IP HOSTNAME SYSTEM 192.168.131.129 hadoop-master CentOS 7.6 192.168.131.135 hadoop-slave1 CentO ...

  4. 答疑记录:jmeter从返回的html中提取指定内容

    返回的html(截取部分),要求从中提取:2022-02-22 13:46:15 <!-- 前面省略557行 --> <td>2022-02-22</td> < ...

  5. [题解]USACO 5.2.1 Snail Trails

    链接:http://cerberus.delos.com:791/usacoprob2?S=snail&a=uzElkgTaI9d 描述:有障碍的棋盘上的搜索,求从左上角出发最多经过多少个格子 ...

  6. 网络主动测评系统,IT网络运维管理的法宝!

    随着计算机网络的普及和快速发展,互联网已经融入到人们的衣食住行等方方面面,如工作.购物.音视频聊天.视频会议.朋友圈.抖音.在线网游.网络电影电视等.毫不夸张地说,现如今大部分人的绝大多数时间都已经离 ...

  7. 市场竞争白热化,Smartbi Excel分析助力企业提高核心竞争力

    ​近年来,随着企业的数字化转型,数据已经成为企业的重要资产,用来支撑其业务决策.对业务数据进行全方位的分析,及时发现问题,调整经营策略,是企业做大做强的必要手段之一.特别是在市场竞争白热化的行业,更需 ...

  8. oracle中临时表的用法详解

    转至:https://blog.csdn.net/mystonelxj/article/details/85010856?utm_medium=distribute.pc_relevant.none- ...

  9. Java课程设计---数据库工具类

    接下来看看传统的查询方式(一个完整的查询) package com.java.mysql; import java.sql.Connection; import java.sql.DriverMana ...

  10. Qt:QCustomPlot使用教程(三)——用户交互

    0.说明 本节翻译总结自:Qt Plotting Widget QCustomPlot - User Interactions 本节内容是使用QCustomPlot实现绘图和用户交互功能. 本文代码中 ...