题意: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++.h>

 typedef long long LL;

 const int N = , MO = ;

 int n, k, d;

 inline int qpow(int a, int b) {
int ans();
while(b) {
if(b & ) {
ans = (LL)ans * a % MO;
}
a = (LL)a * a % MO;
b = b >> ;
}
return ans;
} namespace DP {
int f[][], C[][];
inline void solve() {
f[][] = ;
for(int i = ; i <= ; i++) {
C[i][] = C[i][i] = ;
for(int j = ; j < i; j++) {
C[i][j] = (C[i - ][j] + C[i - ][j - ]) % MO;
}
}
for(int i = ; i < k; i++) {
for(int j = ; j <= n; j++) {
for(int p = ; j + p <= n; p += d) {
(f[i + ][j + p] += (LL)f[i][j] * C[n - j][p] % MO) %= MO;
}
}
}
printf("%d\n", f[k][n]);
return;
}
} namespace D2 { int fac[N], inv[N], invn[N]; inline int C(int n, int m) {
if(n < || m < || n < m) return ;
return (LL)fac[n] * invn[m] % MO * invn[n - m] % MO;
} inline void solve() {
fac[] = inv[] = invn[] = ;
fac[] = inv[] = invn[] = ;
for(int i = ; i <= k; i++) {
fac[i] = (LL)fac[i - ] * i % MO;
inv[i] = (LL)inv[MO % i] * (MO - MO / i) % MO;
invn[i] = (LL)invn[i - ] * inv[i] % MO;
} int ans = ;
for(int i = ; i <= k; i++) {
ans += (LL)C(k, i) * qpow( * i - k, n) % MO;
ans %= MO;
}
int temp = qpow((MO + ) / , k); printf("%lld\n", ((LL)temp * ans % MO + MO) % MO);
return;
}
} int main() { scanf("%d%d%d", &n, &k, &d);
if(d == ) {
printf("%d\n", qpow(k, n));
return ;
}
if(n <= && k <= ) {
DP::solve();
return ;
}
if(d == ) {
D2::solve();
return ;
}
return ;
}

60分代码

UOJ450 复读机的更多相关文章

  1. [2018集训队作业][UOJ450] 复读机 [DP+泰勒展开+单位根反演]

    题面 传送门 思路 本文中所有$m$是原题目中的$k$ 首先,这个一看就是$d=1,2,3$数据分治 d=1 不说了,很简单,$m^n$ d=2 先上个$dp$试试 设$dp[i][j]$表示前$i$ ...

  2. 【做题】UOJ450 - 复读机——单位根反演

    原文链接 https://www.cnblogs.com/cly-none/p/UOJ450.html 题意:请自行阅读. 考虑用生成函数来表示答案.因为秒之间是有序的,所以这应当是个指数生成函数.故 ...

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

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

  4. UOJ#450. 【集训队作业2018】复读机 排列组合 生成函数 单位根反演

    原文链接https://www.cnblogs.com/zhouzhendong/p/UOJ450.html 题解 首先有一个东西叫做“单位根反演”,它在 FFT 的时候用到过: $$\frac 1 ...

  5. UOJ #450「集训队作业2018」复读机

    UOJ #450 题意 有$ k$台复读机,每时每刻有且只有一台复读机进行复读 求$ n$时刻后每台复读机的复读次数都是$ d$的倍数的方案数 $ 1\leq d \leq 3,k \leq 5·10 ...

  6. 处女座与复读机 DP

    题目链接:https://ac.nowcoder.com/acm/contest/327/G 题意:给你两个字符串序列,让你根据第二个序列判断是不是 复读机,复读机会有以下特征 1.       将任 ...

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

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

  8. 牛客国庆集训派对Day4 J-寻找复读机

    链接:https://www.nowcoder.com/acm/contest/204/J 来源:牛客网 时间限制:C/C++ 1秒,其他语言2秒 空间限制:C/C++ 1048576K,其他语言20 ...

  9. uoj#450. 【集训队作业2018】复读机(单位根反演)

    题面 传送门 题解 我的生成函数和单位根反演的芝士都一塌糊涂啊-- \(d=1\),答案就是\(k^n\)(因为这里\(k\)个复读机互不相同,就是说有标号) \(d=2\),我们考虑复读机的生成函数 ...

随机推荐

  1. sql基础学习

    学习参考网站:http://www.runoob.com/sql/sql-tutorial.html 一.SQL命令 1.SELECT 语句 用于从数据库中选取数据. select column_na ...

  2. python中oop

    转自  http://www.cnblogs.com/BeginMan/p/3510786.html 本文旨在Python复习和总结: 1.如何创建类和实例? # 创建类 class ClassNam ...

  3. 16-MySQL-Ubuntu-数据表的查询-分组与聚合(五)

    分组(group by)一般与聚合结合使用 (1)查询按性别分组 select gender from students group by gender; (2)查询按性别分组并统计每组的数量sele ...

  4. 【POJ】1321棋盘问题

    题目链接:http://poj.org/problem?id=1321 题意:见题干,很清楚了. 题解:简单dfs,参照八皇后 代码: #include<iostream> #includ ...

  5. Error creating bean with name 'unMblTotController': 注入失败

    今天新来的小伙子,进公司做项目,然后自己新建了包,出了以下错误 y.UnsatisfiedDependencyException: Error creating bean with name 'unM ...

  6. 如何收集项目日志统一发送到kafka中?

    上一篇(http://qindongliang.iteye.com/blog/2354381 )写了收集sparkstreaming的日志进入kafka便于后续收集到es中快速统计分析,今天就再写一篇 ...

  7. Ansible配置及使用

    使用公私钥实现ssh无密码登录 生成公钥和私钥 ssh-keygen -t rsa 公钥相当于锁id_rsa.pub,私钥相当于钥匙id_rsa 借用ssh-copy-id工具实现无密码登录 ssh- ...

  8. C盘清理记——罪魁Visual Studio

    话不啰嗦,单刀直入:在C:\ProgramData\Microsoft Visual Studio文件夹下,VS会自动记录IntelliTrace File,久而久之,会无限消耗磁盘空间,直接到塞满C ...

  9. MySQL Download

    { http://www.wampserver.com/#wampserver-64-bits-php-5-6-25-php-7 }

  10. CSS3——过渡

    过渡(transition)是CSS3中具有颠覆性的特征之一,我们可以在不使用 Flash 动画或 JavaScript 的情况下,当元素从一种样式变换为另一种样式时为元素添加效果. 帧动画:通过一帧 ...