传送门

\(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. 关于Mysql数据库查询数据大小写的问题汇总

    前天在问答区看到一个童鞋对于mysql中大小写问题不熟悉,在回复他后再次汇总梳理如下: mysql中大小写问题主要有以下两种: A.表名区分大小写 ower_case_table_names 是表名区 ...

  2. BLE pairing vs. bonding

    differece between pairing and bonding .see

  3. L: Long Long Ago---二分

    L: Long Long Ago 时间限制: 1 s      内存限制: 128 MB        题目描述 今天SHIELD捕获到一段从敌方基地发出的信息里面包含一串被经过某种算法加密过的的序列 ...

  4. Mac 10.12安装抓包工具Charles

    说明:青花瓷,Filddler之后就是这个最好用.收费软件. 下载: (链接:https://pan.baidu.com/s/1kV1Robl 密码: 3g6u)

  5. LINQ入门教程之各种标准查询操作符(一)

    好久之前就想系统的学习下LINQ,好久之前…… 本篇文章主要介绍LINQ等的标准查询操作符,内容取自<LINQ高级编程>,后续还会介绍LINQ to XML ,LINQ to SQL. L ...

  6. C#枚举类型转换

    string 转 enum (自己定义的枚举类型)(Enum.Parse(typeof(自己定义的枚举类型), 待转字符串)); enum 转 string enum.Getname(typeof(自 ...

  7. (转)zabbix3.4使用percona-monitoring-plugins监控mysql

    原文:https://blog.csdn.net/yanggd1987/article/details/79656771 简介 之前主要使用nagios监控mysql,本文主要介绍使用percona- ...

  8. mysql-常用注入渗透手法

    mysql: 内置函数常用函数:left(), mid(), ord(),  length(), benchmark(),load_file(), outfile(), concat(), 系统重要信 ...

  9. CentOS6.4安装OpenSSL

    1.下载 wget https://www.openssl.org/source/openssl-1.0.2h.tar.gz 2.解压 tar zxf openssl-1.0.2h.tar.gz cd ...

  10. Struts html(标签)

    一 <html:form> <html:form>用来创建表单,<html:form>必须包含一个action属性,否则JSP会抛出一个异常. 1.常用属性: Ac ...