题面 传送门 思路 本文中所有$m$是原题目中的$k$ 首先,这个一看就是$d=1,2,3$数据分治 d=1 不说了,很简单,$m^n$ d=2 先上个$dp$试试 设$dp[i][j]$表示前$i$个复读机用掉了$j$个机会,注意这个东西最后求出来的是分配方案,还要乘以一个$n!$ $dp[i][j]=\sum_{k=0}^j [d|k]\binom{n-j+k}{k}dp[i-1][j-k]$ $dp[i][j]=\sum_{k=0}^j [d|k]\frac{(n-j+k)!}{(n-j)…
uoj450 [集训队作业2018]复读机(生成函数,单位根反演) uoj 题解时间 首先直接搞出单个复读机的生成函数 $ \sum\limits_{ i = 0 }^{ k } [ d | i ] \frac{ x^{ i } }{ i! } $ . 容易想到直接上单位根反演: \[\begin{aligned} \sum\limits_{ i = 0 }^{ k } [ d | i ] \frac{ x^{ i } }{ i! } & = \sum\limits_{ i = 0 }^{ k…
题目链接:https://ac.nowcoder.com/acm/contest/327/G 题意:给你两个字符串序列,让你根据第二个序列判断是不是 复读机,复读机会有以下特征 1.       将任意一个小写字母替换成另外一个小写字母 2.       在任意位置添加一个小写字母 3.       删除任意一个字母 分析: 动态规划.dp[i][j]代表从s[1...i]变为t[1...j]需要改动的次数. 初始化dp[][] for(int i=0;i<=ss;i++) dp[i][0]=i…
原文链接 https://www.cnblogs.com/cly-none/p/UOJ450.html 题意:请自行阅读. 考虑用生成函数来表示答案.因为秒之间是有序的,所以这应当是个指数生成函数.故答案就是 \[ [x^n] \left( \sum_{i \geq 0} \frac {x^i} {i!} [d | i] \right)^k \] 突破口显然是在\([d|i]\)上. 于是考虑使用单位根反演.也就是 \[ \frac {1} {n} \sum_{i=0}^{n-1} \omega…
题意:n个位置,k种颜色.求有多少种方案使得每种颜色恰出现d的倍数次. 解:d=1就快速幂,n,k很小就DP,记得乘组合数来分配位置. d = 2 / 3的时候,考虑生成函数. f(x) = ∑[d | i] / (i!) 然后发现d = 2的时候就是(ex + e-x) / 2,这个东西的k次方可以用二项式定理展开,然后O(klogn)算,log是快速幂. d = 3的时候用单位根反演,O(k2)枚举系数,同样算.因为我不想学单位根反演就没写... #include <bits/stdc++.…
题面 请务必不要吐槽我的标签 传送门 思路 一个很重要的结论:原序列的一组同构的解等价于同一棵拥有$n$个节点的笛卡尔树 注意笛卡尔树的定义:父亲节点是区间最值,并且分割区间为左右部分 所以如果两个序列的笛卡尔树同构,那么他们的每一个区间最小值位置相同,也就是原题目中的同构条件了 一个很重要的结论:定义笛卡尔树节点的深度为根到这个节点的路径上向左走的次数,那么合法序列的笛卡尔树所有节点深度不超过$m$ 首先,我们可以定义区间的父节点是所有最值中最靠左的,那么容易得到,节点的左儿子中的所有权值严格…
[UOJ#450][集训队作业2018]复读机(生成函数,单位根反演) 题面 UOJ 题解 似乎是\(\mbox{Anson}\)爷的题. \(d=1\)的时候,随便怎么都行,答案就是\(k^n\). \(d=2\)的时候,可以做一个\(dp\),设\(f[i][j]\)表示前\(i\)个复读机选了\(j\)个时间的方案数. 然后枚举当前这个复读机复读的次数,得到: \[f[x][j]=\sum_{i=0}^{j}[2|i]{n-j+i\choose i}f[x-1][j-i]\] 化简啥的之后…
原文链接https://www.cnblogs.com/zhouzhendong/p/UOJ450.html 题解 首先有一个东西叫做“单位根反演”,它在 FFT 的时候用到过: $$\frac 1 n \sum_{i=0}^{n-1} \omega_n ^{d\cdot i} = [d|n]$$ 其中 $\omega_n$ 表示 $n$ 次单位根. 接下来我们回到本题. 我们来搞一个指数生成函数,第 i 项表示总共复读 i 次,使得一个复读机开心的方案. $$f(x) = \sum_{i\ge…
前置知识单位根反演自己去浅谈单位根反演看(此外可能需要一定的生成函数的姿势) 首先一看\(d\)这么小,那我们来分类讨论一下吧 当\(d=1\)时,显然答案就是\(k^n\) 当\(d=2\)时,如果你知道可重排列的指数型生成函数: \[G(x)=\sum_{i=0} \frac{x^{2i}}{(2i)!}\] 那么就跳过以下部分直接去看转化,我们来推导一下这个生成函数 直接搞一个DP,设\(f_{i,j}\)表示前\(i\)个复读机选了\(j\)个时间的方案数,转移的时候枚举这个复读机复读了…
题目链接 题目描述 群里有\(k\)个不同的复读机.为了庆祝平安夜的到来,在接下来的\(n\)秒内,它们每秒钟都会选出一位优秀的复读机进行复读.非常滑稽的是,一个复读机只有总共复读了\(d\)的倍数次才会感到快乐.问有多少种不同的安排方式使得所有的复读机都感到快乐. Sol 发现 \(d\) 只有 \(3\) , 很可能需要分开讨论. \(d=1\) 就是 \(k^n\) \(d=2\): 其实容易发现这是一个有次数限制的可重排列问题,那么可以使用指数型生成函数来解决. 一个复读机的生成函数就是…