传送门

\(d=1\) 输出 \(k^n\)

\(d=2\),构造生成函数,就是求

\[(\sum_{i=0}^{\infty}[2|i]\frac{x^i}{i!})^k[x^n]=(\frac{e^x+e^{-x}}{2})^k
\]

直接二项式定理展开求 \(n\) 次项系数即可

\(d=3\),构造生成函数,就是求

\[(\sum_{i=0}^{\infty}[3|i]\frac{x^i}{i!})^k[x^n]
\]

\(19491001-1\) 正好是 \(3\) 的倍数,直接单位根弄一下,里面的东西

\[\frac{1}{3}\sum_{i=0}^{\infty}\frac{x^i}{i!}\sum_{j=0}^{2}w_3^{ij}
\]

\[=\frac{1}{3}\sum_{j=0}^{2}\sum_{i=0}^{\infty}\frac{(xw_3^j)^i}{i!}=\frac{1}{3}(e^x+e^{xw_3^1}+e^{xw_3^2})
\]

\(k\le 1000\),就直接 \(k^2\) 枚举然后计算就好了

# include <bits/stdc++.h>
using namespace std;
typedef long long ll; const int maxn(5e5 + 5);
const int mod(19491001); int n, k, d, fac[maxn], inv[maxn]; inline void Inc(int &x, int y) {
x = x + y >= mod ? x + y - mod : x + y;
} inline int Pow(ll x, ll y) {
register ll ret = 1;
for (x %= mod, y %= mod - 1; y; y >>= 1, x = x * x % mod)
if (y & 1) ret = ret * x % mod;
return ret;
} inline int C(int x, int y) {
if (y > x || x < 0 || y < 0) return 0;
return (ll)fac[x] * inv[y] % mod * inv[x - y] % mod;
} int main() {
register int i, j, ans, w1, w2, e;
scanf("%d%d%d", &n, &k, &d);
if (d == 1) printf("%d\n", Pow(k, n));
else if (d == 2) {
fac[0] = fac[1] = inv[0] = inv[1] = 1;
for (i = 2; i < maxn; ++i) inv[i] = (ll)(mod - mod / i) * inv[mod % i] % mod;
for (i = 2; i < maxn; ++i) fac[i] = (ll)fac[i - 1] * i % mod, inv[i] = (ll)inv[i] * inv[i - 1] % mod;
for (i = ans = 0; i <= k; ++i) Inc(ans, (ll)Pow((i * 2 - k + mod) % mod, n) * C(k, i) % mod);
ans = (ll)ans * Pow(2, (ll)k * (mod - 2) % (mod - 1)) % mod;
printf("%d\n", ans);
}
else {
fac[0] = fac[1] = inv[0] = inv[1] = 1;
for (i = 2; i < maxn; ++i) inv[i] = (ll)(mod - mod / i) * inv[mod % i] % mod;
for (i = 2; i < maxn; ++i) fac[i] = (ll)fac[i - 1] * i % mod, inv[i] = (ll)inv[i] * inv[i - 1] % mod;
w1 = Pow(7, (mod - 1) / 3), w2 = (ll)w1 * w1 % mod;
for (ans = i = 0; i <= k; ++i)
for (j = k - i; ~j; --j) {
e = (i + (ll)j * w1 + (k - i - j) * w2) % mod;
Inc(ans, (ll)C(k, i) * C(k - i, j) % mod * Pow(e, n) % mod);
}
ans = (ll)ans * Pow(3, (ll)k * (mod - 2) % (mod - 1)) % mod;
printf("%d\n", ans);
}
return 0;
}

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. SVN服务器端环境搭建步骤

    5.1 安装服务器端程序 yum install -y subversion 5.2 创建并配置版本库 创建版本库目录 mkdir -p /var/svn/repository 在版本库目录下创建具体 ...

  2. go 语言学习 1

    Go语言命名 Go语言关键字 1.Go语言有25个关键字: 2.关键字用途: var :用于变量的声明const :用于常量的声明type :用于声明类型func :用于声明函数和方法package ...

  3. EDEM 2018 + Fluent 19.0耦合

    具体步骤参考流沙的文章即可,如果python版本较高,可能有个地方需要小小的改动一下: tools文件夹下的compile_lib_edem_coupling.py文件中,导入模块有个地方需要修改 其 ...

  4. PTA 这是二叉搜索树吗?

    https://pintia.cn/problem-sets/994805046380707840/problems/994805070971912192 #include<iostream&g ...

  5. MAVEN打zip包

    https://blog.csdn.net/yulin_hu/article/details/81835945 https://www.cnblogs.com/f-zhao/p/6929814.htm ...

  6. SqlServer索引、优化、约束、连接

    索引的创建和删除 create index in_name on person(name) --创建索引 drop index person.in_name --删除索引 create index i ...

  7. Cisco ISR4400 Netflow 配置模板

    flow exporter NAME destination 145.0.1.200 transport udp 9991 export-protocol netflow-v5 flow monito ...

  8. Linux下ls命令使用详解(转)

    说明:我们在linux下使用ll时,其实就是ls -l.ls才是最终的命令程序. ls命令是linux下最常用的命令之一,ls跟dos下的dir命令是一样的都是用来列出目录下的文件,List即列表的意 ...

  9. 静态类和静态方法,抽象类和抽象方法,new关键字,值类型和引用类型,接口

    静态类和静态方法:静态成员是与类相关,而非实例相关:普通类中的静态成员:1.只能通过类名访问.2.静态方法中只能访问静态成员,或通过对象访问实例成员.3.多个对象共享同一个成员.静态类(一般用作工具类 ...

  10. ubuntu 添加多个IP

    上次这个问题 :  UBUNTU 无法解析域名 解决方法 解决后,每次重启电脑都需要重新配置 /etc/resolv.conf. 这次添加IP的时候留心发现,在/etc/network/interfa ...