题意: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. idea 设置默认maven auto import,不需要每次都弹出

    1 2 误区 从这里点进去进行设置,或者每次打开项目右击下方的 auto impot都是不对的.

  2. Ngui之UI框架的层级处理

    #region 处理层级问题 void DepthIncrease(UIWndBase uiWnd) { DepthIncrease(uiWnd.transform, UIFlag); } publi ...

  3. 2019 牛客多校第一场 D Parity of Tuples

    题目链接:https://ac.nowcoder.com/acm/contest/881/D 看此博客之前请先参阅吕凯飞的论文<集合幂级数的性质与应用及其快速算法>,论文中很多符号会被本文 ...

  4. 01、requests 基本使用

    requests模块的基本使用 基于网络请求的模块. 环境的安装:pip install requests 作用:模拟浏览器发起请求 分析requests的编码流程: 1.指定url 2.发起了请求 ...

  5. springboot项目中使用设计模式一策略模式

    策略模式: 使用常用,支付,之前做了微信支付,支付宝支付,然后另外一个同事写了一个银联支付,那么如果代码方法一起就会导致代码不是很好操作所以,采用策略模式进行,同事只需要写一个实现类,就可以了, 在协 ...

  6. angularJS ng-model与wdatapicker问题记录

    代码: <input type="text" placeholder="开始日期" ng-model="data_start" onF ...

  7. 使用SpringBoot1.4.0的一个坑

    时隔半年,再次使用Spring Boot快速搭建微服务,半年前使用的版本是1.2.5,如今看官网最新的release版本是1.4.0,那就用最新的来构建,由于部署环境可能有多套所以使用maven-fi ...

  8. this 、typeof、false、parseInt()、this、arguments、Array和object判断

    typeof typeof (undefined) 不会报错 undefined object Number boolean function String 返回值为字符串类型 false .fals ...

  9. WPF 新突破

    刘琦告诉我  需要改变哪个属性哪个属性就需要实现InotifyPropertyChanged 董秀伟告诉我  界面改变会立即传输到属性上,并不需要实现InotifyPropertyChanged,只有 ...

  10. Java 集群高可用监控(结合阿里SLB)脚本

    欢迎点评,大家一起来优化 计划思路: 只有在mysql slave java 进程状态都正常的情况下才允许nginx 运行, 否则就干掉它, 负载用的是阿里的SLB #bin/bash #邮件函数  ...