link

.... 感觉自己太颓废了。。。。还是来更题解吧。。。【话说写博客会不会涨 rp 啊 qaq ?

题意:

有 n 个物品,每个都有一个 [1,D] 中随机的颜色,相同颜色的两个物品可以配对。现在要求至少能配 m 对,问方案数? $n,m\leq 10^9,D\leq 10^5$

题解:

配对数量 $\geq m \Longleftrightarrow$ 出现奇数次的权值个数 $\leq n-2m$ 。

一个权值出现偶数次的生成函数: $\frac{e^x +e^{-x}}{2}$

一个权值出现奇数次的生成函数: $\frac{e^x - e^{-x}}{2}$

答案的式子:

$$ \begin{aligned} &n!\sum_{k=0}^{n-2m} \left ( \frac{e^x +e^{-x}}{2} + y \frac{e^x - e^{-x}}{2} \right )^D [x^n][y^k]\\ =&n!\left (\frac12 \right )^D \sum_{k=0}^{n-2m} \left (e^x + e^{-x} + y\left ( e^x - e^{-x} \right )\right )^D[x^n][y^k]\\ =&n!\left (\frac12 \right )^D \sum_{k=0}^{n-2m} \left (e^x (1+y) + e^{-x}(1-y) \right )^D[x^n][y^k]\\ =&n!\left (\frac12 \right )^D \sum_{k=0}^{n-2m} \sum_{i=0}^{D}\binom{D}{i} \left (e^{x}(1+y) \right )^i \left( e^{-x}(1-y)\right )^{D-i} [x^n][y^k]\\ =&n!\left (\frac12 \right )^D \sum_{k=0}^{n-2m} \sum_{i=0}^{D}\binom{D}{i} e^{\left (2i-D\right )x} (1+y)^i (1-y)^{D-i} [x^n][y^k]\\ =&\left (\frac12 \right )^D \sum_{i=0}^{D} \binom{D}{i} (2i-D)^n \sum_{k=0}^{n-2m} (1+y)^i (1-y)^{D-i} [y^k] \end{aligned}$$

这就是最后的式子。

考虑怎么对于每个 i 快速求出后面的 $\sum_{k=0}^{n-2m} (1+y)^i (1-y)^{D-i} [y^k]$ ?

可以发现这是一个生成函数的系数前缀和。

即 $\left ( (1+y)^i (1-y)^{D-i} \right )\left (1+y+y^2+y^3+...\right ) [y^{n-2m}]$ ;

即 $\left ( (1+y)^i (1-y)^{D-i} \right )\left (\frac{1}{1-y}\right ) [y^{n-2m}]$ 。

可以发现当 $i\neq D$ 的时候,上式 $= \left ( (1+y)^i (1-y)^{D-i-1} \right )[y^{n-2m}]$ ;

$i=D$ 的时候上式 $=\sum_{k=0}^{n-2m} (1+y)^D [y^k]$ ,由于 $(1+y)^D$ 中 $y$ 不超过 D 次,所以有效的 $k\leq D$ ,暴力计算即可。

那 $i\neq D$ 的时候怎么办呢?我们记 $k=n-2m$ ,$d=D-1$ ,枚举两边对 k 的贡献,即

$$\sum_{j=0}^k \binom{i}{j} \binom{d-i}{k-j}(-1)^{k-j}$$

这种组合数的形式的转化当然是套路的阶乘展开啦——

$$\begin{aligned} \sum_{j=0}^k \frac{i!}{j!(i-j)!} \cdot \frac{(d-i)!}{(k-j)!(d-i-k+j)!} \cdot (-1)^{k-j}\\ =i!(d-i)!\sum_{j=0}^k \frac{(-1)^{k-j}}{j!(k-j)!} \cdot \frac{1}{(i-j)!(d-i-k+j)!}\\ \end{aligned}$$

就是个卷积形式了, fft 即可。

复杂度 $\mathcal{O}(D \log D).$

code:

 #include<bits/stdc++.h>
#define rep(i,x,y) for (int i=(x);i<=(y);i++)
#define ll long long using namespace std; const int N=(<<)+,mod=,inv2=(mod+)>>;
int D,n,m,k,d,fac[N],ifac[N],ans,invn,w[N],r[N],a[N],b[N]; int ksm(int x,int y){
int s=; x=(x+mod)%mod;
for (;y;y>>=,x=(ll)x*x%mod) if (y&) s=(ll)s*x%mod;
return s;
} void init(int n){
fac[]=;
rep (i,,n) fac[i]=(ll)fac[i-]*i%mod;
ifac[n]=ksm(fac[n],mod-);
for (int i=n;i;i--) ifac[i-]=(ll)ifac[i]*i%mod;
} int C(int n,int m){
if (n<m) return ;
return (ll)fac[n]*ifac[m]%mod*ifac[n-m]%mod;
} inline void upd(int &x,int y){x+=y; x-=x>=mod?mod:;} void fft_init(int &n){
int len=; while (<<len<n) len++; n=<<len;
int G=ksm(,(mod-)>>len); invn=ksm(n,mod-);
w[]=w[n]=;
rep (i,,n-) w[i]=(ll)w[i-]*G%mod,r[i]=(r[i>>]>>)|((i&)<<(len-));
} void fft(int *a,int all,int fl){
rep (i,,all-) if (i<r[i]) swap(a[i],a[r[i]]);
int n=,m=,x=all>>;
for (;n<=all;m=n,n<<=,x>>=)
for (int i=;i<all;i+=n)
for (int k=;k<m;k++){
int t=(ll)w[fl?all-x*k:x*k]*a[i+m+k]%mod;
a[i+m+k]=(a[i+k]+mod-t)%mod;
a[i+k]=(a[i+k]+t)%mod;
}
if (fl) rep (i,,all-) a[i]=(ll)a[i]*invn%mod;
} int main(){
scanf("%d%d%d",&D,&n,&m),init(D);
k=min(n-*m,D),d=D-;
rep (i,,k) a[i]=(ll)(((k-i)&)?mod-:)%mod*ifac[i]%mod*ifac[k-i]%mod;
rep (i,,d) if (d-k-i>=) b[i]=(ll)ifac[i]%mod*ifac[d-k-i]%mod;
int _n=k+d+; fft_init(_n);
fft(a,_n,),fft(b,_n,);
rep (i,,_n-) a[i]=(ll)a[i]*b[i]%mod;
fft(a,_n,);
rep (i,,d) a[i]=(ll)a[i]*fac[i]%mod*fac[d-i]%mod;
rep (i,,D){
int v=(ll)C(D,i)*ksm(*i-D,n)%mod,tmp=;
if (i==D) rep (i,,k) upd(tmp,C(D,i));
else tmp=a[i];
upd(ans,(ll)tmp*v%mod);
}
printf("%lld\n",(ll)ans*ksm(inv2,D)%mod);
return ;
}

loj3120 「CTS2019 | CTSC2019」珍珠的更多相关文章

  1. LOJ 3120: 洛谷 P5401: 「CTS2019 | CTSC2019」珍珠

    题目传送门:LOJ #3120. 题意简述: 称一个长度为 \(n\),元素取值为 \([1,D]\) 的整数序列是合法的,当且仅当其中能够选出至少 \(m\) 对相同元素(不能重复选出元素). 问合 ...

  2. 【LOJ】#3120. 「CTS2019 | CTSC2019」珍珠

    LOJ3120 52pts \(N - D >= 2M\)或者\(M = 0\)那么就是\(D^{N}\) 只和数字的奇偶性有关,如果有k个奇数,那么必须满足\(N - k >= 2M\) ...

  3. @loj - 3120@ 「CTS2019 | CTSC2019」珍珠

    目录 @description@ @solution@ @accepted code@ @details@ @description@ 有 \(n\) 个在范围 \([1, D]\) 内的整数均匀随机 ...

  4. Loj #3124. 「CTS2019 | CTSC2019」氪金手游

    Loj #3124. 「CTS2019 | CTSC2019」氪金手游 题目描述 小刘同学是一个喜欢氪金手游的男孩子. 他最近迷上了一个新游戏,游戏的内容就是不断地抽卡.现在已知: - 卡池里总共有 ...

  5. 「CTS2019 | CTSC2019」氪金手游 解题报告

    「CTS2019 | CTSC2019」氪金手游 降 智 好 题 ... 考场上签到失败了,没想容斥就只打了20分暴力... 考虑一个事情,你抽中一个度为0的点,相当于把这个点删掉了(当然你也只能抽中 ...

  6. 「CTS2019 | CTSC2019」随机立方体 解题报告

    「CTS2019 | CTSC2019」随机立方体 据说这是签到题,但是我计数学的实在有点差,这里认真说一说. 我们先考虑一些事实 如果我们在位置\((x_0,y_0,z_0)\)钦定了一个极大数\( ...

  7. LOJ 3119: 洛谷 P5400: 「CTS2019 | CTSC2019」随机立方体

    题目传送门:LOJ #3119. 题意简述: 题目说的很清楚了. 题解: 记恰好有 \(i\) 个极大的数的方案数为 \(\mathrm{cnt}[i]\),则答案为 \(\displaystyle\ ...

  8. LOJ #3119「CTS2019 | CTSC2019」随机立方体 (容斥)

    博客链接 里面有个下降幂应该是上升幂 还有个bk的式子省略了k^3 CODE 蛮短的 #include <bits/stdc++.h> using namespace std; const ...

  9. 【LOJ】#3123. 「CTS2019 | CTSC2019」重复

    LOJ3123 60pts 正难则反,熟练转成总方案数减掉每个片段都大于等于s的字典序的方案 按照一般的套路建出kmp上每个点加一个字符的转移边的图(注意这个图开始字母必须是nxt链中下一个相邻的字符 ...

随机推荐

  1. Dockfile文件解析

    1. Dockerfile内容基础知识 每条保留字指令都必须为大写字母且后面要跟随至少一个参数 指令按照从上到下,顺序执行 #表示注释 每条指令都会创建一个新的镜像层,并对镜像进行提交 2. Dock ...

  2. Java架构笔记:用JWT对SpringCloud进行认证和鉴权

    写在前面 喜欢的朋友可以关注下专栏:Java架构技术进阶.里面有大量batj面试题集锦,还有各种技术分享,如有好文章也欢迎投稿哦. image.png JWT(JSON WEB TOKEN)是基于RF ...

  3. maven一些简单常用却容易记混的命令参数-U -e -B

    install 命令完成了项目编译.单元测试.打包功能,同时把打好的可执行jar包(war包或其它形式的包)布署到本地maven仓库,但没有布署到远程Maven私服仓库: deploy 命令完成了项目 ...

  4. 十年感悟之 python之路

    本文由 简悦 SimpRead 转码, 原文地址 https://laisky.com/p/python-road/ Changelog: updated at 2019/9/6 一.概述 本文起源于 ...

  5. 加快JavaScript加载和执行效率

    JavaScript 在浏览器中的性能成为开发者所面临的最重要的可用性问题.而这个问题又因 JavaScript 的阻塞特性变的复杂,也就是说当浏览器在执行 JavaScript 代码时,不能同时做其 ...

  6. 计算机等级考试【二级C语言程序设计】知识点整理

    *免责声明:本文章中所收集或者引用到的内容的所有版权均为引用内容的原作者所有,本站仅作收集并整理,不承担任何法律责任! *题库收集来源于:[未来教育考试软件2017年版 - 计算机二级 - C语言程序 ...

  7. ble编程-外设发送数据到中心

    一.外设 1.在外设的.h文件中定义如下   1 //周边管理者 2 3 @property (nonatomic , strong) CBPeripheralManager *peripheralM ...

  8. ceph集群部署(基于jewel版)

    环境 两个节点:ceph1.ceph2 ceph1: mon.mds.osd.0.osd.1 ceph2: osd.2.osd.3 网络配置: ceph1: 管理网络,eth0,10.0.0.20 存 ...

  9. outlook配置其他邮箱登录如qq邮箱或登录无邮件信息记录

    今天加班想想自己outlook还没登登录过,于是想着登录一下outlook方便管理邮箱信息,才发现原来登录邮箱都要配置,感觉真是醉了.下面开始正式的配置流程. 选择添加账户 首先,点击文件选择账户设置 ...

  10. ubuntu18.04 安装idea

    首先从官网下载idea:IntelliJ IDEA    (在安装IDEA前应先安装jdk环境) 得到ideaIU-2019.2.4.tar.gz 将安装包移动到/usr/local,这样可以让所有用 ...