CF1278F Cards

首先我们知道,一次拿牌的概率是 $ P(i) = \frac 1 m $ ,同时权值是1,所以期望就是 $ \frac{1} m $,拿 $ n $ 次牌贡献是独立的,就是 $ \frac n m $。

但是我们要算的是 $ k $ 次方的期望,众所周知期望的二次方不等于二次方的期望。我们考虑 $ E $ 的意义,$ E $ 在这一次拿到 Joker 的 $ \frac 1 m $ 的概率下是 1 ,其他情况是0。则 $ E^2 $ 就是随机两次,这两次都是 1 的情况下是 1 ,其他情况是0。

我们把这 $ n $ 次是否抓到 Joker 的 0/1 写成一个序列,所以知道最后统计的答案,就是所有的长度为 $ k $ 的有序子序列(可以是 $ A_3,A_2,A_2 $ 这种的 ),它做出贡献的前提就是这个子序列的所有随机变量都去到 1 了。

接着考虑,如果两个序列的位置种类数一致,那么它们出现的概率是相同的。如果知道这些位置都是 Joker ,那么这些位置组成的所有序列都会出现。

所以考虑一个 dp ,$ dp[i][j] $ 表示当前在选择第 $ i $ 个位置,到达这个位置时已经有 $ j $ 个不同的位置出现了。那么 $ \sum dp[k][i] \times \frac{1}{m^{i}} $ 就是答案,因为有 $ \frac{1}{m^i} $ 的概率这 $ i $ 个钦定的元素位置都是 Joker,这样带来的权值就是方案数。然后考虑这个 dp 的递推,这是很轻松的:

\[dp[i][j] = dp[i-1][j] \times j + dp[i-1][j-1] \times (n-j+1)
\]

就是考虑第 $ i $ 个位置是选择前 $ j $ 个之一还是新选择一种。

代码很简单:

#include "algorithm"
#include "iostream"
#include "cstring"
#include "cstdio"
using namespace std;
#define MAXN 5006
#define P 998244353
int n , m , k;
int dp[MAXN][MAXN];
int Pow( int a , int b ) {
int cur = a % P , ans = 1;
while( b ) {
if( b & 1 ) ans = 1ll * ans * cur % P;
cur = 1ll * cur * cur % P , b >>= 1;
}
return ans;
}
int main( ) {
cin >> n >> m >> k;
dp[0][0] = 1;
for( int i = 1 ; i <= k ; ++ i ) {
for (int j = 1; j <= i; ++j)
dp[i][j] = ( 1ll * dp[i-1][j] * j % P + 1ll * dp[i-1][j-1] * ( n - j + 1 ) % P ) % P;
}
int res = 0 , cur = 1 , p = Pow( m , P - 2 );
for( int i = 0 ; i <= k ; ++ i )
( res += 1ll * dp[k][i] * cur % P ) %= P , cur = 1ll * cur * p % P;
cout << res << endl;
}

CF1278F Cards的更多相关文章

  1. 洛谷 P6031 - CF1278F Cards 加强版(推式子+递推)

    洛谷题面传送门 u1s1 这个推式子其实挺套路的吧,可惜有一步没推出来看了题解 \[\begin{aligned} res&=\sum\limits_{i=0}^ni^k\dbinom{n}{ ...

  2. FFT/NTT复习笔记&多项式&生成函数学习笔记Ⅱ

    因为垃圾电脑太卡了就重开了一个... 前传:多项式Ⅰ u1s1 我预感还会有Ⅲ 多项式基础操作: 例题: 26. CF438E The Child and Binary Tree 感觉这题作为第一题还 ...

  3. BZOJ 1004 【HNOI2008】 Cards

    题目链接:Cards 听说这道题是染色问题的入门题,于是就去学了一下\(Bunside\)引理和\(P\acute{o}lya\)定理(其实还是没有懂),回来写这道题. 由于题目中保证"任意 ...

  4. Codeforces Round #384 (Div. 2) 734E Vladik and cards

    E. Vladik and cards time limit per test 2 seconds memory limit per test 256 megabytes input standard ...

  5. bzoj 1004 Cards

    1004: [HNOI2008]Cards Description 小春现在很清闲,面对书桌上的N张牌,他决定给每张染色,目前小春只有3种颜色:红色,蓝色,绿色.他询问Sun有 多少种染色方案,Sun ...

  6. codeforces 744C Hongcow Buys a Deck of Cards

    C. Hongcow Buys a Deck of Cards time limit per test 2 seconds memory limit per test 256 megabytes in ...

  7. CF 204B Little Elephant and Cards

    题目链接: 传送门 Little Elephant and Cards time limit per test:2 second     memory limit per test:256 megab ...

  8. HDU 1535 Invitation Cards(最短路 spfa)

    题目链接: 传送门 Invitation Cards Time Limit: 5000MS     Memory Limit: 32768 K Description In the age of te ...

  9. Codeforces Round #227 (Div. 2) E. George and Cards set内二分+树状数组

    E. George and Cards   George is a cat, so he loves playing very much. Vitaly put n cards in a row in ...

随机推荐

  1. 设置nginx进程可打开最大的文件数

    涉及到的nginx配置参数: worker_processes: 表示操作系统启动多少个工作进程在运行,一般这个参数设置成CPU核数的倍数 worker_connections:表示nginx的工作进 ...

  2. 不可错过的stm32单片机直流电机驱动与测速详解

    stm32直流电机驱动与测速 说实话就现在的市场应用中stm32已经占到了绝对住到的地位,51已经成为过去式,32的功能更加强大,虽然相应的难度有所增加,但是依然阻止不了大家学习32的脚步,不说大话了 ...

  3. Spring Cloud Gateway夺命连环10问?

    大家好,我是不才陈某~ 最近有很多小伙伴私信我催更 <Spring Cloud 进阶>,陈某也总结了一下,最终原因就是陈某之前力求一篇文章将一个组件重要知识点讲透,这样导致了文章篇幅很长, ...

  4. 解决boa网页操作出现502 Bad Gateway The CGI was not CGI/1.1 compliant的一种可能

    最近在把一套网页操作的接口从原来Android5.0上移植到Android7.0上. 客户端连接验证的时候主页显示异常 502 Bad Gateway The CGI was not CGI/1.1 ...

  5. 第K个数 牛客网 程序员面试金典 C++ Python

    第K个数 牛客网 程序员面试金典 C++ Python 题目描述 有一些数的素因子只有3.5.7,请设计一个算法,找出其中的第k个数. 给定一个数int k,请返回第k个数.保证k小于等于100. 测 ...

  6. Luogu P1525 [NOIp2010提高组]关押罪犯 | 并查集

    题目链接 这一道题,我用了并查集来做.在此题中,并查集的作用就是:将同一个监狱里的罪犯合并到一起. 思路:将每对罪犯之间的怨气值从大到小排序,再依次把他们分到不同的两个监狱里,当发现这一对罪犯已经在同 ...

  7. Linux 显示ip、dns、网关等命令

    在新版的ubuntu 终端里输入命令nm-tool, 想查看网络参数设置, 没想到却返回如下内容:   未找到 'nm-tool' 命令,您要输入的是否是:  命令 'dm-tool' 来自于包 'l ...

  8. cf 12C Fruits(贪心【简单数学】)

    题意: m个水果,n个价格.每种水果只有一个价格. 问如果给每种水果分配价格,使得买的m个水果总价格最小.最大. 输出最小值和最大值. 思路: 贪心. 代码: bool cmp(int a,int b ...

  9. 面试官:能手写实现call、apply、bind吗?

    1 call.apply.bind 用法及对比 1.1 Function.prototype 三者都是Function原型上的方法,所有函数都能调用它们 Function.prototype.call ...

  10. Vue3.x 关于组件的那些变化(新手必看篇)

    一.组件内的 data 为什么总是函数形式? 我们试着先做一个计数器案例,把 data 的返回形式修改成一个对象.具体的代码如下: <template> <div> <b ...