LINK:5.15 T2





个人感觉生成函数更无脑 容斥也好推的样子.

容易想到每次放数和数字的集合无关 所以得到一个dp f[i][j]表示前i个数字 逆序对为j的方案数.

容易得到转移 使用前缀和优化即可。

进一步的可以设出其生成函数 对于第i次放数字 生成函数为\(F(x)=1+x^1+x^2+...x^{n-i}\)

那么容易得到答案的生成函数为 \(G(x)=\frac{\Pi_{i=1}^{n}(1-x^i)}{(1-x)^n}\)

化简一下 然后dp出来方案数即可 可以发现这个dp是\(k\sqrt n\)

当然也可以容斥 可以发现 其实每个数字都有范围[0,i-1]

我们想要求出 \(g_1+g_2+...g_n=k\)这个等式的解的个数。

此时隔板法可以求出 方程的解 不过不一定满足 范围。

考虑 容斥 总方案-一个不合法+两个不合法-三个不合法...

容易想到 第i个数字不合法当且仅当其值>=i时不合法 那么利用代表元 就很容易统计其不合法方案.

这样问题变成了 求出 f[i][j]表示i个数字和为j的方案数.

显然这i个数字每个都不相同 那么第一维是一个根号的状态.

所以 转移也很简单 不过值得注意的是需要减掉某个数字>n的方案.

这个在第一次越过的时候减掉即可。

两种方案 殊途同归 写法一模一样.

const ll MAXN=100010;
ll n,k,maxx;
ll f[600][MAXN];
ll fac[MAXN<<1],inv[MAXN<<1];
inline ll ksm(ll b,ll p)
{
ll cnt=1;
while(p)
{
if(p&1)cnt=cnt*b%mod;
b=b*b%mod;p=p>>1;
}
return cnt;
}
inline void prepare()
{
fac[0]=1;
rep(1,maxx,i)fac[i]=fac[i-1]*i%mod;
inv[maxx]=ksm(fac[maxx],mod-2);
fep(maxx-1,0,i)inv[i]=inv[i+1]*(i+1)%mod;
}
inline ll C(ll a,ll b){return a<b?0:fac[a]*inv[b]%mod*inv[a-b]%mod;}
signed main()
{
freopen("b.in","r",stdin);
freopen("b.out","w",stdout);
get(n);get(k);
maxx=n+k;prepare();
ll ww=(ll)sqrt(k*2*1.0)+1;
f[0][0]=1;
rep(1,ww,i)
{
rep(1,k,j)
{
if(j>=i)f[i][j]=(f[i][j-i]+f[i-1][j-i])%mod;
if(j>n)f[i][j]=(f[i][j]-f[i-1][j-n-1])%mod;
}
}
ll ans=0;
rep(0,ww,i)
{
rep(0,k,j)
{
if(i&1)ans=(ans-f[i][j]*C(k-j+n-1,n-1))%mod;
else ans=(ans+f[i][j]*C(k-j+n-1,n-1))%mod;
}
}
putl(M(ans));
return 0;
}

5.15 省选模拟赛 容斥 生成函数 dp的更多相关文章

  1. 6.15 省选模拟赛 老魔杖 博弈论 SG函数

    这道题确实没有一个很好的解决办法 唯一的正解可能就是打表找规律 或者 直接猜结论了吧. 尽管如此 在此也给最终结论一个完整的证明. 对于70分 容易发现状态数量不大 可以进行暴力dp求SG函数. 原本 ...

  2. 5.15 省选模拟赛 T1 点分治 FFT

    LINK:5.15 T1 对于60分的暴力 都很水 就不一一赘述了. 由于是询问所有点的这种信息 确实不太会. 想了一下 如果只是询问子树内的话 dsu on tree还是可以做的. 可以自己思考一下 ...

  3. 4.15 省选模拟赛 编码 trie树 前缀和优化建图 2-sat

    好题 np. 对于20分 显然可以爆搜. 对于50分 可以发现每个字符串上的问号要么是0,要么是1.考虑枚举一个字符串当前是0还是1 这会和其他字符串产生矛盾. 所以容易 发现这是一个2-sat问题. ...

  4. 省选模拟赛 4.26 T1 dp 线段树优化dp

    LINK:T1 算是一道中档题 考试的时候脑残了 不仅没写优化 连暴力都打挂了. 容易发现一个性质 那就是同一格子不会被两种以上的颜色染.(颜色就三种. 通过这个性质就可以进行dp了.先按照左端点排序 ...

  5. 5.29 省选模拟赛 树的染色 dp 最优性优化

    LINK:树的染色 考场上以为这道题要爆蛋了 没想到 推出正解来了. 反正是先写了爆搜的 爆搜最近越写越熟练了 容易想到dp 容易设出状态 f[i][j]表示以i为根的子树内白色的值为j此时黑色的值怎 ...

  6. 4.26 省选模拟赛 T3 状压dp 差分求答案

    LINK:T3 比较好的题目 考试的时候被毒瘤的T2给搞的心态爆炸 这道题连正解的思路都没有想到. 一看到题求删除点的最少个 可以使得不连通. 瞬间想到最小割 发现对于10分直接跑最小割即可. 不过想 ...

  7. 4.9 省选模拟赛 圆圈游戏 树形dp set优化建图

    由于圆不存在相交的关系 所以包容关系形成了树的形态 其实是一个森林 不过加一个0点 就变成了树. 考虑对于每个圆都求出最近的包容它的点 即他的父亲.然后树形dp即可.暴力建图n^2. const in ...

  8. 【洛谷比赛】[LnOI2019]长脖子鹿省选模拟赛 T1 题解

    今天是[LnOI2019]长脖子鹿省选模拟赛的时间,小编表示考的不怎么样,改了半天也只会改第一题,那也先呈上题解吧. T1:P5248 [LnOI2019SP]快速多项式变换(FPT) 一看这题就很手 ...

  9. 浅析容斥和DP综合运用

    浅析容斥和DP综合运用 前言 众所周知在数数题中有一种很重要的计数方法--容斥.但是容斥有一个很大的缺陷:枚举子集的复杂度过高.所以对于数据规模较大的情况会很乏力,那么我们就只能引入容斥DP. 复习一 ...

随机推荐

  1. 如何修复 WordPress 中的 HTTP 错误

    如何修复我们会向你介绍,如何在 Linux VPS 上修复 WordPress 中的 HTTP 错误. 下面列出了 WordPress 用户遇到的最常见的 HTTP 错误,我们的建议侧重于如何发现错误 ...

  2. 自适应高度输入框(contenteditable/textarea)

      一.用div模拟textarea div模拟输入域可以根据输入内容自动伸缩,而input和textarea输入内容较多时,高度固定,内容会显示不全. 1.坑1(IOS端无法输入) 在取消全局默认样 ...

  3. 如何更换Windows中命令提示符(cmd)中的字体

    前言 CMD(命令提示符),全称"Command Prompt":对于这个东西我相信大部分用电脑的人基本都知道,因为常常会用到一些基本的DOS命令进行一些电脑的基本查看处理:但是我 ...

  4. BUUCTF-BJD(更新V1.0)

    CTF-Day1 (PS:第一次写博客,就是想记录自己的一一步一步) Misc: 问卷调查 | SOLVED |题最简单的misc-y1ng | SOLVED |Real_EasyBaBa | SOL ...

  5. 漫画:Integer 竟然有 6 种比较方式?

    代码测试 public class IntegerTest { public static void main(String[] args) { Integer i1 = 127; Integer i ...

  6. 【js】栈方法和队列方法

    栈方法:后进先出,推入(push)和弹出(pop):push("**")返回数组长度,pop()返回弹出的项. var colors = new Array(); // 创建一个数 ...

  7. 从零开始使用 Webpack 搭建 Vue3 开发环境

    从零开始使用 Webpack 搭建 Vue3 开发环境 创建项目 首先需要创建一个空目录,在该目录打开命令行,执行 npm init 命令创建一个项目,这个过程会提示输入一些内容,完成后会自动生成一个 ...

  8. day16 三层装饰器和迭代器

    一. 经典的两层装饰器,也是标准装饰器 案例 import time def outter1(func): def wrapper(*args, **kwargs): start = time.tim ...

  9. CSS(二)- 选择器 - 伪元素和伪类(思维导图)

    伪元素 伪元素可以创建一些文档语言无法创建的虚拟元素.比如:文档语言没有一种机制可以描述元素内容的第一个字母或第一行,但伪元素可以做到(::first-letter.::first-line).同时, ...

  10. 数据可视化之PowerQuery篇(八)利用PowerQuery,进行更加灵活的数据分列

    https://zhuanlan.zhihu.com/p/66540160 常规分列 我们最常见的就是有固定分隔符的规范数据,这种直接就按照分隔符拆分就可以了, 如果没有分割符怎么办?依然是上面的数据 ...