题解 - Game on Sum (Easy Version)

题目,还是不挂洛谷。

Alice 镇楼

题目大意

Alice 和 Bob 又在玩游戏。

该种游戏共分为 \(n\) 轮,每轮中,先有一个数 \(x = 0\),Alice 将选择 \(t \isin [0, t_{max}]\),而 B 将会选择将 \(x\) 增加或减少 \(t\)。在全部 \(n\) 轮中,B 应至少有 \(m\) 次选择减少操作。

Alice 希望结果最大,而 B 希望结果最小,并且他们都会做出最优决策。

求问最终 \(x\) 的值。

思路简析

感觉这个很博弈论。

每步最优操作,要推 dp 的样子还是比较显然的吧?

这里只有 \(n, m\) 是给定变量,所以显然以其为状态。

考虑 \(f_{i, j}\) 的一个值即进行了 \(i\) 轮时,已经进行 \(j\) 次增加操作时的 \(x\) 值。

边界为 \(f_{i, 0} = 0, f_{i, i} = i \times k\)(当 \(j = 0\) 时,Alice 必选 \(0\),当 \(j = i\) 时,Alice 必选 \(k\))。

由于是 B 进行操作,那么他必然是取小,易得转移方程:

\(f_{i, j} = \min{f_{i-1, j}-t, f_{i-1, j-1}+t}\)

\(Range : i_{1\rightarrow n}, j_{1\rightarrow \min{i-1, m}}\)

考虑 Alice 要尽量大,那么就不能让 B 选出最小的,所以她会使 \(f_{i-1, j}-t = f_{i-1, j-1}+t\),整理得 \(t = \frac{f_{i-1, j}-f_{i-1, j-1}}{2}\),那么 \(f_{i, j} = f_{i-1, j-1}+t = \frac{f_{i-1, j}+f_{i-1, j-1}}{2}\)

最终结果是 \(f_{n, m}\)

然后我们写完了就会发现这是显然不对的,因为样例里有分数,而 \(f_{i, j}\) 显然无法存入分数。

这个怎么办?一开始我还想分开存分子和分母,于是突击乘法逆元,然后你看定义:

如果一个线性同余方程 \(ax \equiv 1 \pmod b\) ,则 \(x\) 称为 \(a \bmod b\) 的逆元,记作 \(a^{-1}\)

那我们正好就是要把这个数乘上 \(2^{-1}\) 的。所以要找到 \(2x \equiv 1 \pmod {10^9+7}\),得 \(x = 5\times10^8+4\),所以把每个 \(f_{i, j}\) 都乘上 \(5\times10^8+4\) 即可(相当于除以 \(2\))。

\(2147482647 \div (5\times10^8+4) \approx 4\),所以在代码里这里要乘上 1LL。)

但是你考虑这样的话时间复杂度是 \(O(T\cdot n\cdot m)\)\(4\times 10^9\) 的。

怎么办怎么办,但是你仔细看一眼这里除了 \(k\) 真有啥是必要的吗?显然对于这个 dp \(n\)\(m\) 只是一个范围,那么我们只要把范围推够了即可。那么我们可以预先钦定一个 \(k = 1\),然后对于每一问进行对 \(k\) 的一个乘,即是答案(这样的话上面转移方程的范围 \(i\) 应是到 \(n_{max}\)\(j\) 也可以去掉 \(m\) 了,这很好。)。

点击查看代码
#include <bits/extc++.h>
namespace {
using namespace std;
using namespace __gnu_pbds;
#define fiin(x) freopen(x".in", "r", stdin)
#define fiout(x) freopen(x".out", "w", stdout)
#define files(x) fiin(x), fiout(x)
#define und unsigned
#define ll long long
#define db double
#define pii pair<int, int>
#define mp(x, y) make_pair(x, y)
#define m1p(x, y) ((x<<14)+y)
#define fir first
#define sec second
#define hap gp_hash_table
// #define pri_que 
const int man = 2e3+10, mop = 1e9+7, inv = 5e8+4;
}int T, n, m, k, li, lj;
int f[man][man];
int main () {files("test");scanf("%d", &T);for (int i = 1; i <= 2e3; ++ i) {f[i][i] = i;for (int j = 1; j < i; ++ j) f[i][j] = 1LL*(f[i-1][j]+f[i-1][j-1])*inv%mop;}while (T --) {scanf("%d%d%d", &n, &m, &k);printf("%lld\n", 1LL*f[n][m]*k%mop);} return 0;
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/840723.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

CritiCS:智能协作下的创意长篇故事生成框架 | EMNLP24

来源:晓飞的算法工程笔记 公众号,转载请注明出处论文: Collective Critics for Creative Story Generation论文地址:https://arxiv.org/abs/2410.02428创新点提出了 \({\tt CritiCS}\) 的框架,旨在通过基于创造力标准的集体评议,创造性地增强故事计划和文本表现力。 通过实…

基于laravel cors 跨站解决

终于解决了困扰了两天的问题: 需求: 基于vue3的前端项目以及基于laravel的后端项目。将他们分别配置为127.0.0.1 www.ggzx.com 以及 127.0.0.1 www.zx.com。 再在nginx上配置相应的项目,如下: 前端项目: 后端项目: 问题: 由于两个项目的前后端是不同的源,因此在浏览器…

数据交换事前、事中、事后全流程安全机制,三方发力让安全落地!

数据交换安全对于企业的重要性不言而喻。它不仅关系到企业核心资产和商业机密安全,还影响企业合规、客户信任、业务创新及企业品牌价值等多个方面。因此,越来越多的企业高度重视数据交换安全保护,力求构筑牢固的安全基础,为长远发展开拓空间。飞驰云联基于企业对数据交换安…

2024.11.25(周一)

用Java代码模拟实现课堂上的“银行账户”的实例,要求编写客户端测试代码模拟用户存款和取款,注意账户对象状态和行为的变化。 实验要求: 1. 画出对应的类图; 2. 提交源代码; 3. 注意编程规范。1、类图2、源代码 (1)GreenState.java package rjsj.no22;public clas…

百度网站标题被修改不了,百度搜索结果标题优化

如果百度搜索结果中的网站标题无法按预期显示,可以尝试以下方法优化:检查 <title> 标签:确保每个页面的 <title> 标签内容唯一且包含主要关键词。 例如:<title>新标题 - 关键词1, 关键词2</title>使用 robots.txt 和 meta 标签:在 robots.txt 文件…

网站模板买过来要修改吗,购买网站模板后的修改建议

购买网站模板后,通常需要进行一些修改以适应您的业务需求。以下是一些建议:需求分析:明确您的业务需求,确定需要修改的部分,如页面布局、颜色方案、功能模块等。 备份模板:在进行任何修改前,确保备份原始模板文件,防止意外损失。 修改内容:使用文本编辑器(如Sublime …

网站导航修改 如何修改网站的导航

登录后台:通过浏览器访问您的网站后台管理界面,通常地址为 http://yourdomain/admin 或类似路径。 进入导航管理:在后台左侧菜单中找到“导航管理”或“菜单管理”选项,点击进入导航管理页面。 修改导航项:在导航管理页面中,添加、删除或修改导航项,调整顺序。 保存设置…

python-memoryview

在Python中,memoryview是一个内置函数,它提供了一种对字节样式数据的高效、可切片访问的方式,而无需复制底层数据。这对于处理大型数组或缓冲区特别有用,因为它可以避免不必要的内存分配和复制,从而提高性能。memoryview对象提供了一种视图到已存在的内存块,而不是创建新…

VMware ESXi 7.0U3q macOS Unlocker OEM BIOS 2.7 标准版和厂商定制版

VMware ESXi 7.0U3q macOS Unlocker & OEM BIOS 2.7 标准版和厂商定制版VMware ESXi 7.0U3q macOS Unlocker & OEM BIOS 2.7 标准版和厂商定制版 ESXi 7.0U3 标准版,Dell (戴尔)、HPE (慧与)、Lenovo (联想)、Inspur (浪潮)、Cisco (思科)、Fujitsu (富士通)、Hitachi…

Redis究竟为什么这么快?

Redis为什么这么快?完全基于内存,数据存在内存中,绝大部分请求是纯粹的内存操作,非常快速,跟传统的磁盘文件数据存储相比,避免了通过磁盘IO读取到内存这部分的开销。 数据结构简单,对数据操作也简单。【Redis中的数据结构】是专门进行设计的,每种数据结构都有一种或多种…

解密prompt系列43. LLM Self Critics

在模型持续提升的道路上,只提升Generator能力是不够的,需要同步提升Supervisor、Verifier的能力,才能提供有效的监督优化信号。人类提供的监督信号有几类,包括人工直接生成最优回答前一章我们介绍了基于模型自我合成数据迭代,来提升LLM生成更合理的自我推理思考链路。但在…

使用 DFU 模式修复或恢复 Mac 固件

搭载 Apple 芯片的 Mac 电脑 DFU 模式全新安装 macOS使用 DFU 模式修复或恢复 Mac 固件 搭载 Apple 芯片的 Mac 电脑 DFU 模式全新安装 macOS 请访问原文链接:https://sysin.org/blog/apple-silicon-mac-dfu/ 查看最新版。原创作品,转载请保留出处。 作者主页:sysin.orgMac …