Solution -「LOCAL」舟游
\(\mathcal{Description}\)
\(n\) 中卡牌,每种三张。对于一次 \(m\) 连抽,前 \(m-1\) 次抽到第 \(i\) 种的概率是 \(p_i\),第 \(m\) 次抽到第 \(i\) 种的概率是 \(q_i\)。若抽到第 \(i\) 种,会等概率地得到三张卡牌中的一张。求得到所有 \(3n\) 张卡的期望 \(m\) 连抽次数。对 \(2000000011\) 取模。
\(n\le6\),\(m\le64\)。
\(\mathcal{Solution}\)
目睹 Tiw 踩标算,%%%
\(\mathcal{Case~1}\)
长得就像状压期望 DP。令 \(f(S,i)\) 表示抽到的卡牌集合为 \(S\)(同种卡牌显然无序,用两个 bit 记录一种卡牌拥有的张数即可)。发现转移会有一个 \(f(S,1)\leftarrow f(S,2)\leftarrow\cdots\leftarrow f(S,m)\leftarrow f(S,1)\) 的大小为 \(m\) 的简单环。手动消元解出来就好。
考 场 上 写 自 闭 了。
\(\mathcal{Case~2}\)
长得就像 \(\text{Min-Max}\) 反演——Tiw。\(\text{Min-Max}\) 反演在期望意义下的式子长成:
\]
其中 \(S\) 是随机变量集合。对于本题,我们相当于要求每张卡被抽到时间的最大值的期望,可以用上式反演成求每张卡被抽到时间的最小值的期望。为方便推式子,令 \(p\) 和 \(q\) 的意义为抽到某一张卡的概率。对于某个具体的卡牌集合,就要求至少抽中 \(T\) 中一张卡牌的期望时间。那么:
\]
枚举集合 \(T\),就做完了。(
复杂度 \(\mathcal O(4^n\log 2000000011)\)。
\(\mathcal{Code}\)
Case 2.
/* Clearink */
#include <cstdio>
typedef long long LL;
const int MAXN = 9, MAXM = 64, MAXS = 1 << 18, MOD = 2000000011;
int n, m, ans, p[MAXN + 5], q[MAXN + 5];
inline int add ( LL a, const int b ) { return ( a += b ) < MOD ? a : a - MOD; }
inline int sub ( LL a, const int b ) { return ( a -= b ) < 0 ? a + MOD : a; }
inline int mul ( LL a, const int b ) { return ( a *= b ) < MOD ? a : a % MOD; }
inline int qkpow ( int a, int b ) {
int ret = 1;
for ( ; b; a = mul ( a, a ), b >>= 1 ) ret = mul ( ret, b & 1 ? a : 1 );
return ret;
}
inline void solve ( const int id, const bool s, const int sump, const int sumq, const int ways ) {
if ( id == n + 1 ) {
int val = mul ( ways, qkpow (
sub ( 1, mul ( qkpow ( sub ( 1, sump ), m - 1 ), sub ( 1, sumq ) ) ), MOD - 2 ) );
ans = ( s ? add : sub )( ans, val );
return ;
}
solve ( id + 1, s, sump, sumq, ways );
solve ( id + 1, !s, add ( sump, p[id] ), add ( sumq, q[id] ), mul ( ways, 3 ) );
solve ( id + 1, s, add ( sump, mul ( p[id], 2 ) ), add ( sumq, mul ( q[id], 2 ) ), mul ( ways, 3 ) );
solve ( id + 1, !s, add ( sump, mul ( p[id], 3 ) ), add ( sumq, mul ( q[id], 3 ) ), ways );
}
int main () {
freopen ( "arknights.in", "r", stdin );
freopen ( "arknights.out", "w", stdout );
scanf ( "%d %d", &n, &m );
int rv = qkpow ( 300 * n, MOD - 2 );
for ( int i = 1; i <= n; ++ i ) scanf ( "%d", &p[i] ), p[i] = mul ( p[i], rv );
for ( int i = 1; i <= n; ++ i ) scanf ( "%d", &q[i] ), q[i] = mul ( q[i], rv );
solve ( 1, 0, 0, 0, 1 );
printf ( "%d\n", ans );
return 0;
}
Solution -「LOCAL」舟游的更多相关文章
- Solution -「LOCAL」二进制的世界
\(\mathcal{Description}\) OurOJ. 给定序列 \(\{a_n\}\) 和一个二元运算 \(\operatorname{op}\in\{\operatorname{ ...
- Solution -「LOCAL」大括号树
\(\mathcal{Description}\) OurTeam & OurOJ. 给定一棵 \(n\) 个顶点的树,每个顶点标有字符 ( 或 ).将从 \(u\) 到 \(v\) ...
- Solution -「LOCAL」过河
\(\mathcal{Description}\) 一段坐标轴 \([0,L]\),从 \(0\) 出发,每次可以 \(+a\) 或 \(-b\),但不能越出 \([0,L]\).求可达的整点数. ...
- Solution -「LOCAL」Drainage System
\(\mathcal{Description}\) 合并果子,初始果子的权值在 \(1\sim n\) 之间,权值为 \(i\) 的有 \(a_i\) 个.每次可以挑 \(x\in[L,R]\) ...
- Solution -「LOCAL」Burning Flowers
灼之花好评,条条生日快乐(假装现在 8.15)! \(\mathcal{Description}\) 给定一棵以 \(1\) 为根的树,第 \(i\) 个结点有颜色 \(c_i\) 和光亮值 ...
- Solution -「LOCAL」画画图
\(\mathcal{Description}\) OurTeam. 给定一棵 \(n\) 个点的树形随机的带边权树,求所有含奇数条边的路径中位数之和.树形生成方式为随机取不连通两点连边直到全 ...
- Solution -「LOCAL」ZB 平衡树
\(\mathcal{Description}\) OurOJ. 维护一列二元组 \((a,b)\),给定初始 \(n\) 个元素,接下来 \(m\) 次操作: 在某个位置插入一个二元组: 翻 ...
- Solution -「LOCAL」充电
\(\mathcal{Description}\) 给定 \(n,m,p\),求序列 \(\{a_n\}\) 的数量,满足 \((\forall i\in[1,n])(a_i\in[1,m])\l ...
- Solution -「LOCAL」「cov. 牛客多校 2020 第五场 C」Easy
\(\mathcal{Description}\) Link.(完全一致) 给定 \(n,m,k\),对于两个长度为 \(k\) 的满足 \(\left(\sum_{i=0}^ka_i=n\r ...
随机推荐
- Python常用功能函数系列总结(四)之数据库操作
本节目录 常用函数一:redis操作 常用函数二:mongodb操作 常用函数三:数据库连接池操作 常用函数四:pandas连接数据库 常用函数五:异步连接数据库 常用函数一:redis操作 # -* ...
- Yum安装Maven
一.安装 wget http://repos.fedorapeople.org/repos/dchen/apache-maven/epel-apache-maven.repo -O /etc/yum. ...
- 最新RabbitMQ安装指南2021.07
一.RabbitMQ入门及安装 1.入门及安装 01 概述 简单概述: RabbitMQ是一个开源的遵循 AMQP协议实现的基于 Erlang语言编写,支持多种客户端(语言),用于在分布式系统中存储消 ...
- linux高大上命令001
[ linux命令 sed ] sed是一个管道命令,可以分析standard input 而且sed可以将数据进行替换.删除.新增.选取的特定的功能 sed [-nefr] [动作] -n ...
- 《剑指offer》面试题42. 连续子数组的最大和
问题描述 输入一个整型数组,数组里有正数也有负数.数组中的一个或连续多个整数组成一个子数组.求所有子数组的和的最大值. 要求时间复杂度为O(n). 示例1: 输入: nums = [-2,1,-3,4 ...
- linux 创建用户 用户组,sudo,禁止root远程ssh登录
创建用户 useradd hanli 为新用户设置密码(在root下可以为普通用户重置密码) passwd hanli 创建用户组 groupadd op 将用户添加到用户组 usermod ...
- 【Vulnhub靶场】JANGOW: 1.0.1
时隔这么久,终于开始做题了 环境准备 下载靶机,导入到virtualBox里面,这应该不用教了吧 开机可以看到,他已经给出了靶机的IP地址,就不用我们自己去探测了 攻击机IP地址为:192.168.2 ...
- Go语言切片一网打尽,别和Java语法傻傻分不清楚
前言 我总想着搞清楚,什么样的技术文章才算是好的文章呢?因为写一篇今后自己还愿意阅读的文章并不容易,暂时只能以此为目标努力. 最近开始用Go刷一些题,遇到了一些切片相关的细节问题,这里做一些总结.切片 ...
- JVM专题3: GC 垃圾回收
合集目录 JVM专题3: GC 垃圾回收 什么是GC? 为什么要有 GC? Garbage Collection, 用于内存回收. 简述一下 Java 垃圾回收机制? 那些内存需要回收 虚拟机中程序计 ...
- hashmap 实现 相同的key值时,value值叠加效果。
一,了解一些基础 package com.ohs.demo; /** * * 一.需求是:停止相同的key值,覆盖效果,将重复的value值,叠加起来. * * 二.hash? 什么是hash? * ...