题目链接:UOJ EI神仙加强版

既然这题模数是今天日期减去\(7\times 10^5\),那就要赶紧把这题做了。

首先肯定是考虑指数型生成函数,列出来之后使用单位根反演一波。

\[\begin{aligned}Ans&=(\sum_{d|i}\frac{x^i}{i!})^k \\&=(\frac{\sum_{j=0}^{d-1}\sum_{i=0}^n\frac{(\omega_d^jx)^i}{i!}}{d})^k \\&=(\frac{\sum_{i=0}^{d-1}e^{\omega_d^ix}}{d})^k \\&=\frac{1}{d^k}(\sum_{i=0}^{d-1}e^{\omega_d^ix})^k\end{aligned}
\]

当\(d=1\)时

\[Ans=e^{kx}
\]

当\(d=2\)时

\[\begin{aligned}Ans&=\frac{1}{2^k}(e^x+e^{-x})^k \\&=\frac{1}{2^k}\sum_{i=0}^k\binom{k}{i}e^{(2i-k)x}\end{aligned}
\]

当\(d=3\)时

\[\begin{aligned}Ans&=\frac{1}{3^k}(e^x+e^{\omega x}+e^{\bar\omega x})^k \\&=\frac{1}{3^k}\sum_{i=0}^k\sum_{j=0}^{k-i}\binom{k}{i,j}e^{(i+j\omega+(k-i-j)\bar\omega)x}\end{aligned}
\]

时间复杂度\(O(k^{d-1}\log n)\)

#include<bits/stdc++.h>
#define Rint register int
using namespace std;
typedef long long LL;
const int N = 500003, mod = 19491001, w = 18827933, w2 = (LL) w * w % mod;
int n, k, d, fac[N], inv[N], ans;
inline void upd(int &a, int b){a += b; if(a >= mod) a -= mod;}
inline int kasumi(int a, int b){
int res = 1;
while(b){
if(b & 1) res = (LL) res * a % mod;
a = (LL) a * a % mod; b >>= 1;
}
return res;
}
int main(){
scanf("%d%d%d", &n, &k, &d); n %= mod - 1;
if(d == 1){printf("%d", kasumi(k, n)); return 0;}
fac[0] = 1;
for(Rint i = 1;i <= k;i ++) fac[i] = (LL) fac[i - 1] * i % mod;
inv[k] = kasumi(fac[k], mod - 2);
for(Rint i = k;i;i --) inv[i - 1] = (LL) inv[i] * i % mod;
if(d == 2){
for(Rint i = 0;i <= k;i ++)
upd(ans, (LL) inv[i] * inv[k - i] % mod * kasumi((2 * i - k + mod) % mod, n) % mod);
printf("%d", (LL) ans * kasumi(2, mod - 1 - k) % mod * fac[k] % mod);
} else if(d == 3){
for(Rint i = 0;i <= k;i ++)
for(Rint j = 0;i + j <= k;j ++)
upd(ans, (LL) inv[i] % mod * inv[j] % mod * inv[k - i - j] % mod *
kasumi((i + (LL) j * w % mod + (LL) (k - i - j) * w2 % mod) % mod, n) % mod);
printf("%d", (LL) ans * kasumi(3, mod - 1 - k) % mod * fac[k] % mod);
}
}

EI对于这题还有一个加强版,但是我不会做,先咕了。

UOJ450 【集训队作业2018】复读机【生成函数】的更多相关文章

  1. uoj #450[集训队作业2018]复读机

    传送门 \(d=1\),那么任何时刻都可以\(k\)个复读机的一种,答案为\(k^n\) \(d>1\),可以枚举某个复读机的复读次数(必须是\(d\)的倍数),然后第\(i\)个复读时间为\( ...

  2. 【UOJ#450】[集训队作业2018] 复读机

    题目链接 题目描述 群里有\(k\)个不同的复读机.为了庆祝平安夜的到来,在接下来的\(n\)秒内,它们每秒钟都会选出一位优秀的复读机进行复读.非常滑稽的是,一个复读机只有总共复读了\(d\)的倍数次 ...

  3. uoj450 【集训队作业2018】复读机(生成函数,单位根反演)

    uoj450 [集训队作业2018]复读机(生成函数,单位根反演) uoj 题解时间 首先直接搞出单个复读机的生成函数 $ \sum\limits_{ i = 0 }^{ k } [ d | i ] ...

  4. 【UOJ#450】【集训队作业2018】复读机(生成函数,单位根反演)

    [UOJ#450][集训队作业2018]复读机(生成函数,单位根反演) 题面 UOJ 题解 似乎是\(\mbox{Anson}\)爷的题. \(d=1\)的时候,随便怎么都行,答案就是\(k^n\). ...

  5. UOJ #449. 【集训队作业2018】喂鸽子

    UOJ #449. [集训队作业2018]喂鸽子 小Z是养鸽子的人.一天,小Z给鸽子们喂玉米吃.一共有n只鸽子,小Z每秒会等概率选择一只鸽子并给他一粒玉米.一只鸽子饱了当且仅当它吃了的玉米粒数量\(≥ ...

  6. [UOJ422][集训队作业2018]小Z的礼物——轮廓线DP+min-max容斥

    题目链接: [集训队作业2018]小Z的礼物 题目要求的就是最后一个喜欢的物品的期望得到时间. 根据$min-max$容斥可以知道$E(max(S))=\sum\limits_{T\subseteq ...

  7. 【UOJ#422】【集训队作业2018】小Z的礼物(min-max容斥,轮廓线dp)

    [UOJ#422][集训队作业2018]小Z的礼物(min-max容斥,轮廓线dp) 题面 UOJ 题解 毒瘤xzy,怎么能搬这种题当做WC模拟题QwQ 一开始开错题了,根本就不会做. 后来发现是每次 ...

  8. UOJ#418. 【集训队作业2018】三角形

    #418. [集训队作业2018]三角形 和三角形没有关系 只要知道儿子放置的顺序,就可以直接模拟了 记录历史最大值 用一个pair(a,b):之后加上a个,期间最大值为增加b个 合并? A1+A2= ...

  9. 2019.2.25 模拟赛T1【集训队作业2018】小Z的礼物

    T1: [集训队作业2018]小Z的礼物 我们发现我们要求的是覆盖所有集合里的元素的期望时间. 设\(t_{i,j}\)表示第一次覆盖第i行第j列的格子的时间,我们要求的是\(max\{ALL\}\) ...

  10. [集训队作业2018]蜀道难——TopTree+贪心+树链剖分+链分治+树形DP

    题目链接: [集训队作业2018]蜀道难 题目大意:给出一棵$n$个节点的树,要求给每个点赋一个$1\sim n$之内的权值使所有点的权值是$1\sim n$的一个排列,定义一条边的权值为两端点权值差 ...

随机推荐

  1. SAS学习笔记49 生成前20个黄金分割数列到数据集

    黄金分割数列即斐波那契数列,该数列中后一个数与前一个数的比例越往后越接近于黄金比例(1+√5)/2 ,此数列分布表现出极致的均衡与和谐之美

  2. 百人研发团队的难题:研发管理、绩效考核、组织文化和OKR

    分享一个公司规模近200,研发占一半的创业公司 Worktile 在研发团队管理方面的玩法,仅供百人左右研发团队参考~ 什么是研发团队?简单的说,你熟悉的那帮穿格子衬衫,以程序员为核心组成的团队,就是 ...

  3. Delphi XE10.1 引用计数(Delphi XE10.1 Berlin终于增加了对接口的Weak, UnSafe的支持)

    以往的Delphi版本,不支持接口的Weak,和UnSafe的引用,支持对象的Weak, UnSafe,而且仅在Android和Ios平台上支持. 现在Delphi XE10.1 Berlin终于增加 ...

  4. flutter从入门到精通三

    flutter可以通过一套代码运行在多个平台上,包括移动,web,桌面,嵌入式,但是在 Web 平台的支持尚未达到 Beta 阶段,请不要用在生产环节,在阅读文档时候,推荐大家阅读https://fl ...

  5. vs2015工程转化为vs2010

    转换的步骤如下: (1)将工程是.sln用记事本打开后,更换以下信息如下:   Microsoft Visual Studio Solution File, Format Version 11.00 ...

  6. English-培训2-五大句型

  7. 前端框架开始学习Vue(一)

    MVVM开发思想图(图片可能会被缩小,请右键另存查看,图片来源于网络)   定义基本Vue代码结构   1 v-text,v-cloak,v-html命令 默认 v-text没有闪烁问题,但是会覆盖元 ...

  8. WindowsPE

    什么是WindowsPE Windows Preinstallation Environment(Windows PE),Windows预引导环境,是带有有限服务的最小Win32子系统,基于以保护模式 ...

  9. Redis4.0之持久化存储

    一,redis概述与实验环境说明 1.1 什么是redis redis是一种内存型的NoSQL数据库,优点是快,常用来做缓存用  redis存储数据的方法是以key-value的形式  value类型 ...

  10. lombok自定义扩展实践

    lombok是一款能够在java代码编译阶段改变代码的插件.比如生成setter和getter方法,生成log类变量等,能够简化一些特定的模版式代码.本文将以实现一个基于特定注解生成日志代码的方式,简 ...