题目描述:

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;
}

View Code

转载于:https://www.cnblogs.com/LiGuanlin1124/p/11136070.html

loj6077. 「2017 山东一轮集训 Day7」逆序对相关推荐

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

    Loj #6077. 「2017 山东一轮集训 Day7」逆序对 Solution 令fi,jf_{i,j}fi,j​表示前iii个数产生jjj个逆序对的方案数,每次考虑把i+1i+1i+1加入,有i ...

  2. 容斥问卷调查反馈——Co-prime,Character Encoding,Tree and Constraints,「2017 山东一轮集训 Day7」逆序对

    文章目录 Co-prime source solution code Character Encoding source solution code Tree and Constraints sour ...

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

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

  4. #6073. 「2017 山东一轮集训 Day5」距离(树链剖分 + 永久标记主席树)

    #6073. 「2017 山东一轮集训 Day5」距离 给定一颗有nnn个节点带边权的树,以及一个排列ppp,path(u,v)path(u, v)path(u,v)为u,vu, vu,v路径上的点集 ...

  5. LOJ#6072. 「2017 山东一轮集训 Day5」苹果树 解题报告

    LOJ#6072. 「2017 山东一轮集训 Day5」苹果树 解题报告 好苹果会组成连通块,整棵树的权值为 ∑ i = 1 n c i [ c i ≥ 0 ] [ s i z n u m ( c i ...

  6. LOJ#6074. 「2017 山东一轮集训 Day6」子序列

    LOJ#6074. 「2017 山东一轮集训 Day6」子序列 先考虑全局询问怎么做,设 f ( i , c ) f(i,c) f(i,c) 表示在 S 1 ⋯ i S_{1\cdots i} S1⋯ ...

  7. LOJ#6103. 「2017 山东二轮集训 Day2」第一题 解题报告

    LOJ#6103. 「2017 山东二轮集训 Day2」第一题 解题报告 前置知识:闭区间上的连续函数的零点存在性定理: 我们定义这样的函数: 定义域为 [ l , r ] ∩ Z [l,r]\cap ...

  8. 「2017 山东一轮集训 Day5」距离

    /* 写完开店再写这个题目顿时神清气爽, 腰也不疼了, 眼也不花了首先考虑将询问拆开, 就是查询一些到根的链和点k的关系根据我们开店的结论, 一个点集到一个定点的距离和可以分三部分算 那么就很简单了吧 ...

  9. [LOJ#6068]. 「2017 山东一轮集训 Day4」棋盘[费用流]

    题意 题目链接 分析 考虑每个棋子对对应的横向纵向的极大区间的影响:记之前这个区间中的点数为 \(x\) ,那么此次多配对的数量即 \(x\) . 考虑费用流,\(S\rightarrow 横向区间 ...

  10. 「2017 山东一轮集训 Day2」Pair (霍尔定理+线段树)

    题目描述 给出一个长度为  的数列  和一个长度为  的数列 ,求  有多少个长度为  的连续子数列能与  匹配. 两个数列可以匹配,当且仅当存在一种方案,使两个数列中的数可以两两配对,两个数可以配对 ...

最新文章

  1. SQLite中的SELECT子句
  2. legend3---laravel中获取控制器名称和方法名称
  3. vue项目使用eslint
  4. Java中的wait()和sleep()方法之间的区别
  5. 隔离式BUCK之参数计算
  6. c语言微信挑一挑编程,100行python代码实现微信跳一跳辅助程序
  7. e470c拆机图解全拆 thinkpad_ThinkPad 拆机教程,更新特别部分,很特别哟!!!
  8. 27000系列标准族谱
  9. Js实现实时显示系统时间(获取当前时间并显示)
  10. 给计算机图片文件夹加密码,文件夹加密软件如何给照片文件夹加密
  11. java重复执行方法_重复java方法
  12. 《操作系统真象还原》——0.6 为什么称为“陷入”内核
  13. CodeForces 1538G : Gift Set 思维 + 二分
  14. 基于微信小程序的校园互助平台
  15. 码农和CTO的差距到底在哪?
  16. 谷歌MIT:微小运动放大算法的实现
  17. 百度智能小程序微信群
  18. 短视频+直播源码,直播老司机带你飞
  19. html css在线申请页面,25个在线工作申请免费HTML的简历模板
  20. 关于浏览器请求PHP一次请求执行了两次

热门文章

  1. 一句话可以改变人的一生
  2. 「leetcode」C++题解:239. 滑动窗口最大值,单调队列的经典题目
  3. Illustrator中文版教程,如何在 Illustrator 中快速连接和修剪路径?
  4. Illustrator 教程,如何在 Illustrator 中编辑路径?
  5. 如何从 Mac 上的“照片”中导出照片、视频和幻灯片放映?
  6. git不同的平台配置不同的公钥秘钥(git配置多个公钥秘钥)(git不同的项目配置不同的公钥秘钥)
  7. iOS开发之千位分隔符(千位符)
  8. iOS开发之iOS11、iPhone X、Xcode9 适配指南
  9. Vitamin-R for Mac(GTD工作效率管理工具)
  10. 在 macOS 中如何使用「预览」批量调整图片大小?