\(\mathscr{Description}\)

  Link, 懒得概括题意.jpg

\(\mathscr{Solution}\)

  Subtask 1 \((n,m\le2)\) 一共只有五种情况, 样例已经给出了三种, 剩下两种自己手玩就行啦!

  Subtask 2 \((n,m\le8)\) 奇奇怪怪的状压, 或者忘记记忆化的各色搜索应该都能得到这档.

  Subtask 3 \((n=m)\) 观察样例可以发现, 此时也许有 \(\textit{ans}=n/2\), 特别的, 当 \(n=m=1\) 时, \(\textit{ans}=1\). 严谨的说, 我们可以证明, 当 \(n=m>1\) 时, 双方一开始就会和局.

Proof

  尝试归纳证明. 假设当 $2\le n\le n_0$ 时, 先手期望得分不低于后手. 现在, 我们来考虑 $n=n_0+1$ 的情况. 此时先手一共只有三种决策:

  1. 选择两张未知牌 (未知牌共 \(2n-m=n=m\) 张);

  2. 选择一张已知牌 (已知牌共 \(m\) 张), 一张未知牌;

  3. 选择两张已知牌.

  对于第一种决策, 因为已知牌中 \(n\) 种类型都已经出现, 所以先手不可能拿到相同类型的牌. 此时先手必然结束自己的回合. 而后手可以立马 "捡漏", 将先手翻出的两张牌和已知的两张牌分别配对, 得到 \(2\) 分. 接着, 后手变为先手, 面对 \(n\gets n-2\) 的情况. 根据归纳假设, 此时的先手期望得分不劣于后手, 所以在这种决策下, 原先手的期望得分低于后手.

  对于第二种决策, 类似的, 先手有 \(1/n\) 的概率直接拿出一对同类卡牌, 以 \((n-1)/n\) 的概率给后手 "打工", 而二者都会递归到 \(n\gets n-1\) 的情况. 设 \(n\gets n-1\) 时, 先手期望得分为 \(x~(x\ge (n-1)/2)\), 那么原来先手的期望得分为:

\[\begin{aligned}
E &= \frac{1}{n}(1+x)+\frac{n-1}{n}(n-1-x)\\
&= \frac{1}{n}+\frac{(n-1)^2}{n}-\frac{n-2}{n}x\\
&\le \frac{1}{n}+\frac{(n-1)^2}{n}-\frac{(n-1)(n-2)}{2n}\\
&= \frac{2+2n^2-4n+2-n^2+3n-2}{2n}\\
&= \frac{n}{2}-\frac{1}{2}+\frac{1}{n}.
\end{aligned}
\]

可见 \(n\ge2\) 时都有 \(E\le\frac{n}{2}\), 也即是原先手期望得分低于后手.

  于是, 先手选择了第三种决策! 第三种决策没有任何效果, 仅仅是 "摆烂" 地过掉自己回合, 轮到对方操作. 此时对方又面临这三种决策的选择, 他又会 "摆烂" 过掉自己的回合 ... 双方都无法让自己的期望得分高于对方, 那么此时双方都会同意和局! 两人得分 \(n/2\), 我们完成了归纳, 也顺带证明了游戏一开始即和局结束.  \(\square\)

  Subtask 4 \((T=1)\) 大概有什么一次只能求出一个答案的算法?

  Subtask 5 来讲正解啦. 在 subtask 3 的证明过程中, 我们已经自然地引入了 "先手得分是否低于后手" 的讨论. 进一步的, 由于双方得分之和一定是 \(n\), 所以我们可以用双方得分之差来刻画先手得分. 令 \(f(n,m)\) 表示 \(n\) 对牌, \(m\) 张已知时, 先手期望得分 \(-\) 后手期望得分的值. 还是来做一做同 subtask 3 证明过程中的三种讨论:

  • 先手选择一张已知牌, 一张未知牌, 此时要求 \(m\ge1\), 有转移:

    \[\begin{array}{ccl}
    f(n,m) & \overset{\max}{\longleftarrow} & \frac{1}{2n-m}(1+f(n-1,m-1))-\frac{m-1}{2n-m}(1+f(n-1,m-1))\\
    & & -\frac{2n-2m}{2n-m}f(n,m+1).
    \end{array}
    \]
  • 先手选择两张未知牌, 此时要求 \(2n-m\ge2\), 有转移:

    \[\begin{array}{ccl}
    f(n,m) & \overset{\max}{\longleftarrow} & \frac{n-m}{\binom{2n-m}{2}}(1+f(n-1,m))-\frac{\binom{m}{2}}{\binom{2n-m}{2}}(2+f(n-2,m-2))\\
    & & -\frac{m(2n-2m)}{\binom{2n-m}{2}}(1+f(n-1,m))-\frac{2(n-m)(n-m-1)}{\binom{2n-m}{2}}f(n,m+2).
    \end{array}
    \]
  • 先手选择两张已知牌, 此时要求 \(m\ge2\). 注意这里不是 \(f(n,m)\overset{\max}{\longleftarrow}-f(n,m)\), 如果这种决策是优秀的, 双方会直接和局, 所以有:

    \[\begin{array}{ccl}
    f(n,m) & \overset{\max}{\longleftarrow} & 0.
    \end{array}
    \]

  边界为 \(f(0,0)=0\). 转移过程有很多细小情况的讨论, 可能会引入非法状态, 但这些非法状态的转移系数必然为 \(0\), 所以不必过分担心. 直接递推或者记忆化搜索, 就能 \(\mathcal O(nm)\) 求出所有 \(f\). 最终答案即为 \((n+f(n,m))/2\).

\(\mathscr{Code}\)

/*+Rainybunny+*/

#include <bits/stdc++.h>

#define rep(i, l, r) for (int i = l, rep##i = r; i <= rep##i; ++i)
#define per(i, r, l) for (int i = r, per##i = l; i >= per##i; --i) typedef double VType;
// typedef long double VType; template <typename Tp>
inline void chkmin(Tp& u, const Tp& v) { v < u && (u = v, 0); }
template <typename Tp>
inline void chkmax(Tp& u, const Tp& v) { u < v && (u = v, 0); }
template <typename Tp>
inline Tp imin(const Tp& u, const Tp& v) { return u < v ? u : v; }
template <typename Tp>
inline Tp imax(const Tp& u, const Tp& v) { return u < v ? v : u; } const int MAXN = 5e3;
bool vis[MAXN + 5][MAXN + 5];
VType f[MAXN + 5][MAXN + 5]; inline VType calc(const int n, const int m) {
if (n <= 0 || m < 0 || n < m) return 0;
VType& cur = f[n][m];
if (vis[n][m]) return cur;
vis[n][m] = true, cur = -1e100;
if (m >= 1) {
chkmax(cur, (1 + calc(n - 1, m - 1)
- (m - 1) * (1 + calc(n - 1, m - 1))
- 2 * (n - m) * calc(n, m + 1))
/ (2 * n - m));
}
if (2 * n - m > 1) {
chkmax(cur, 2 * ((n - m) * (1 + calc(n - 1, m))
- m * (m - 1) / 2 * (2 + calc(n - 2, m - 2))
- 2 * m * (n - m) * (1 + calc(n - 1, m))
- 2 * (n - m) * (n - m - 1) * calc(n, m + 2))
/ ((2 * n - m) * (2 * n - m - 1)));
}
if (m >= 2) chkmax(cur, 0.);
return cur;
} int main() {
int T, n, m;
scanf("%d", &T);
while (T--) {
scanf("%d %d", &n, &m);
printf("%.12f\n", (n + calc(n, m)) / 2);
}
return 0;
}

Solution -「GLR-R4」芒种的更多相关文章

  1. Solution -「ARC 104E」Random LIS

    \(\mathcal{Description}\)   Link.   给定整数序列 \(\{a_n\}\),对于整数序列 \(\{b_n\}\),\(b_i\) 在 \([1,a_i]\) 中等概率 ...

  2. Solution -「CTS 2019」「洛谷 P5404」氪金手游

    \(\mathcal{Description}\)   Link.   有 \(n\) 张卡牌,第 \(i\) 张的权值 \(w_i\in\{1,2,3\}\),且取值为 \(k\) 的概率正比于 \ ...

  3. Solution -「BZOJ 3812」主旋律

    \(\mathcal{Description}\)   Link.   给定含 \(n\) 个点 \(m\) 条边的简单有向图 \(G=(V,E)\),求 \(H=(V,E'\subseteq E)\ ...

  4. Solution -「CF 1342E」Placing Rooks

    \(\mathcal{Description}\)   Link.   在一个 \(n\times n\) 的国际象棋棋盘上摆 \(n\) 个车,求满足: 所有格子都可以被攻击到. 恰好存在 \(k\ ...

  5. Solution -「简单 DP」zxy 讲课记实

    魔法题位面级乱杀. 「JOISC 2020 Day4」治疗计划 因为是不太聪明的 Joker,我就从头开始理思路了.中途也会说一些和 DP 算法本身有关的杂谈,给自己的冗长题解找借口. 首先,治疗方案 ...

  6. Solution -「基环树」做题记录

    写的大多只是思路,比较简单的细节和证明过程就不放了,有需者自取. 基环树简介 简单说一说基环树吧.由名字扩展可得这是一类以环为基础的树(当然显然它不是树. 通常的表现形式是一棵树再加一条非树边,把图画 ...

  7. Solution -「WC 2022」秃子酋长

    \(\mathscr{Description}\)   Link. (It's empty temporarily.)   给定排列 \(\{a_n\}\),\(q\) 次询问,每次给出 \([l,r ...

  8. Solution -「JSOI 2019」「洛谷 P5334」节日庆典

    \(\mathscr{Description}\)   Link.   给定字符串 \(S\),求 \(S\) 的每个前缀的最小表示法起始下标(若有多个,取最小的).   \(|S|\le3\time ...

  9. Solution -「CF 1622F」Quadratic Set

    \(\mathscr{Description}\)   Link.   求 \(S\subseteq\{1,2,\dots,n\}\),使得 \(\prod_{i\in S}i\) 是完全平方数,并最 ...

  10. Solution -「CF 923F」Public Service

    \(\mathscr{Description}\)   Link.   给定两棵含 \(n\) 个结点的树 \(T_1=(V_1,E_1),T_2=(V_2,E_2)\),求一个双射 \(\varph ...

随机推荐

  1. 5道大厂的JAVA经典面试题

    前言 本来想着给自己放松一下,刷刷博客,慕然回首,Java的四种引用,强弱软虚?泛型常用特点?Java创建对象有几种方式? 有没有可能两个不相等的对象有相同的hashcode?深拷贝和浅拷贝的区别是什 ...

  2. php几种常用的算法

    1 <?php 2 3 // 选择排序 4 5 function select_sort($arr) 6 7 { 8 9 $count = count($arr); 10 11 for ($i ...

  3. 解决Delphi应用程序向桌面资源管理拖放问题 win10,winxp,win2003测试成功

    解决Delphi应用程序向桌面资源管理拖放问题 win10,winxp,win2003测试成功 如果是实体拖动,是比较好解决的. 如果是虚拟应用程序数据,拖动到本机桌面或资源管理器目录下,获取目录路径 ...

  4. javaScript 的面向对象程序

    理解对象 属性类型 数据属性(数据属性包含一个数据值的位置,这个位置可以读取和写入值,数据属性有4描述) [Configurable]:表示能否通过 delete 删除属性从而重新定义属性,能否修改属 ...

  5. PHP模块之ssh2

    php远程copy文件以及在远程服务器中执行命令时,所用到的模块是ssh2,以后所有的操作都依据ssh2连接句柄完成. libssh: https://www.libssh2.org/ ssh2: h ...

  6. Lnmp编译安装(2020)

    之前写过几篇有关安装lnmp环境的文章,现在回顾感觉有些比较老了或者并不是好的操作,于是更新这篇 1. 安装Nginx 1) 依赖安装 yum install gcc gcc-c++ openssl ...

  7. IO介绍-上

    IO IO系统管理的主要对象是IO设备和相应的设备控制器.其主要任务是,完成用户提出的IO请求,提高IO效率,以及提高设备的利用率.并能为更高层的进程方比那使用这些设备提供手段. IO系统的基本功能 ...

  8. 录音虚拟驱动杂音bug修复

    永远选择相信同步原语 起因 qemu有一个可以让虚拟机(guest)使用宿主机(host)的音频播放的参数,-device audio.这个参数在x86上效果不错,但是在arm上效果不行,杂音很多,所 ...

  9. ChatGPT生成测试用例的最佳实践(二)

    这种测试用例还不够直观,能不能让其以表格的形式显示呢?笔者输入"请以表格形式展示,谢谢."提示词,ChatGPT输出的部分内容如图3-3所示. 图3-3  ChatGPT输出的部分 ...

  10. 中电金信:云原生时代IT基础设施管理利器——基础设施即代码(IaC)

    ​在数字化转型.零售业务快速发展.信创建设驱动下,应用架构.技术架构.基础架构都已向云原生快速演进,银行业IT基础设施管理产生了非常大的变化,当前银行业,正在开展新一轮的核心应用系统重构.基础平台统一 ...