题意

有\(n\)种颜色的球,第i种有\(a_i\)个。设\(m=\sum a_i\)。你要把这\(m\)个小球排成一排。有\(q\)个询问,每次给你一个\(x\),问你有多少种方案使得相邻的小球同色的对数为\(x\)。\(n\leq 10000,m\leq 200000\)

做法

一脸的容斥对吧

先不考虑严格的同色,对于第\(i\)种颜色,分为\(b_i\)块,单就已经分好的情况,有:\[\frac{(\sum b_i)!}{\prod (b_i!)}\]
然后来做分块的过程,\(f_{i,j}\)表示前\(i\)中颜色,分成\(j\)块,然后把\(\frac{1}{\prod(b_i!)}\)也顺便统计:\[f_{i,j}=\sum\limits_{k=1}^j f_{i-1,j-k}{a_i-1\choose k-1}\frac{1}{k!}\]

这个可以分治fft做

然后再乘上本来上面那一坨,记\(g_i=f_{n,i}\times i!\)
然后容斥一下\(ans_i=\sum\limits_{j=1}^i (-1)^{i-j}g_j{m-j\choose i-j}\),这个画下图就好了,不知道为啥要归纳

这里的\(ans_i\)指严格分\(i\)块的答案

XSY2666的更多相关文章

  1. 【XSY2666】排列问题 DP 容斥原理 分治FFT

    题目大意 有\(n\)种颜色的球,第\(i\)种有\(a_i\)个.设\(m=\sum a_i\).你要把这\(m\)个小球排成一排.有\(q\)个询问,每次给你一个\(x\),问你有多少种方案使得相 ...

随机推荐

  1. Vue 常用三种传值方式

    Vue常用的三种传值方式: 父传子 子传父 非父子传值 引用官网一句话:父子组件的关系可以总结为 prop 向下传递,事件向上传递.父组件通过 prop 给子组件下发数据,子组件通过事件给父组件发送消 ...

  2. cpu负载高简单排查思路

    首先通过uptime查看系统负载,然后使用mpstat结合pidstat来初步判断到底是cpu计算量大还是进程争抢过大或者是io过多,接着使用vmstat分析切换次数,以及切换类型,来进一步判断到底是 ...

  3. js小练习---实现红绿灯

    <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ...

  4. HDU_3853_概率dp

    http://acm.hdu.edu.cn/showproblem.php?pid=3853 又因为总期望为子期望的加权和,加权因子为子期望的转移概率,所以得到:dp[ i ][ j ]= p1 * ...

  5. 《Python学习手册 第五版》 -第9章 元组、文件与其他核心类型

    本章的主要内容是介绍了元组和文件的使用,同时作为介绍数据类型的最后一个章节,本章也总结和复习了前面所介绍的核心数据类型,总结的部分在此不多介绍,因为前面章节都有,在此就重点介绍以下两点内容 1.元组 ...

  6. Vsftpd: 基于PAM认证的虚拟用户和匿名用户

    目录 环境说明效果说明及截图①. 安装组件②. 系统账户建立③. 编辑vsftpd的配置文件④. 生成虚拟用户的数据库文件⑤. 生成一个使用vsftpd_login.db数据文件的PAM认证文件⑥. ...

  7. vue学习(四)登陆、注册、首页模板页区分

    按照上面文章配置完毕后,会发现有个问题,我登陆页面.注册页面是不需要视图页的. 开始配置路由 重新配置main.js 引入 import App from './App' //引入vue组件 更改启动 ...

  8. debian 安装xz 命令

    # apt install -y xz-utils # xz -d Python-3.6.8.tar.xz # xz -d Python-3.6.8.tar.xz

  9. 写ppt的助手

    代码格式化工具. https://carbon.now.sh/?bg=rgba(74%2C144%2C226%2C1)&t=material&wt=none&l=auto&am ...

  10. css实现文字过长显示省略号的方法

    <div class="title">当对象内文本溢出时显示省略标记</div> 这是一个例子,其实我们只需要显示如下长度: css实现网页中文字过长截取. ...