[U519393]战略游戏

news/2024/12/27 21:04:13/文章来源:https://www.cnblogs.com/Rainbow-Prism/p/18636739

[U519393] 战略游戏

形式化题意

\(n\) 个数,记作 \(a_1,a_2,\ldots, a_n\),开始有一个空集 \(b\)。每次 \(L\)\(a\) 中取出一个数 \(x\),将 \(x\) 放入集合 \(b\),并将其从 \(a\) 中删除。\(Q\)\(a\) 中删除最多 \(k\) 个数。\(L\) 的得分即为 \(b\) 的 $ \operatorname{MEX} \(。\)L$ 希望得分尽可能大,\(Q\) 希望得分尽可能小,在两者的最优策略下求最大得分。

暴力

容易发现,答案 \(ans\ge x\)。这就相当于当数列简化为 \([0,x-1]\) 时,\(L\) 可以从所有数中取一次。进一步,我们只需要求出满足该条件的最大 \(x\)

对于 \(L\) 来说,他每次都会取最小的 \(f_j (0\leq j\lt i)\),且 \(i\) 未选。

对于 \(Q\) 来说,虽然看上去 \(f_i\) 顺序是固定的,但我们可以发现 \(Q\) 删数的顺序并不固定,只需要构建 \(f\) 的排列 \(g_0,g_1,\ldots,g_{x-2},g_{x-1}\),且 \(g_i\leq g_j(i\leq j)\)

这样,我们就能总结出来 \(Q\) 的策略就是使元素的出现频率尽量小,但是取数之后必须要满足 \(g\) 的要求。由此可以得出,\(Q\) 最多进行 \(m\) 次防守,直接暴力模拟,复杂度 \(O(m^3 logm)=O(m^2)\cdot O(m)\cdot O(logm)\)

正解

主题思路相同,但是复杂度需要适当优化。

\(sum=\sum_{i=1}^n f_i\),如果 \(f_i=\lfloor \frac{s+i-1}{n}\rfloor\),则 \(f=\{a,a,\ldots,a,a+1,a+1,\ldots,a+1\}\)。显然,二元组 \(f(n,sum)\) 就可以用来描述完整的 \(f\)

例如 \(Q\) 单次删除数的数量最多为 \(4\),即 \(k=4\),则:

\(1\degree\) 参与模拟 \(L\) 删除数组第一个元素

\([1,2,3,5,5]\rightarrow[2,3,3,3]\rightarrow[1,2,2]\)

\(2\degree\) 不参与模拟 \(L\) 删除数组第一个元素

\([1,2,3,5,5]\rightarrow[1,2,3,3,3]\rightarrow[1,1,2,2,2]\)

此时发现 \([1,2,2]\) 并不是 \([1,1,2,2,2]\) 的后缀。

故而说,假设我们不模拟 \(L\) 删除数组第一个元素,转而模拟 \(Q\)。可以发现,为了删掉 \(index\leq i\) 中的数,我们必须要使 \(f_{i+1}=f_{i+2}=\ldots=f_n\)

如果在 \(e\) 轮操作后得到了形如 \(f\) 的数组,那必然 \(f(n-e,\sum_{i=e+1}^n f_i - e\cdot k)\)。为了找到正确的 \(e\),我们可以直接二分查看数组的后缀的 \(\Delta\) 是否满足 \(\Delta\gt f_p\),其中 \(\Delta\) 为过程中删去的总量。

由于 \(f(n,sum)\rightarrow f(n-1,s-k-\lfloor\frac{s}{n}\rfloor)\),我们可以算每个 \(n\) 对应的最小 \(sum\),使得 \(L\) 得到最大得分。

具体实现:双指针,复杂度:\(O(mlogm)\)

# include <bits/stdc++.h>
using namespace std;
typedef long long ll;const int N = 200010;
ll T, m, k;
ll id[N], f[N];
ll g[N], pre[N], h[N];bool cmp(ll x, ll y) {return f[x] < f[y];}bool check(ll x)
{ll cnt;cnt = 0;for (int i = 0; i <= m; i++){if (id[i] <= x){h[cnt] = f[id[i]];if (cnt > 0) pre[cnt] = pre[cnt - 1];pre[cnt] += h[cnt];cnt++;}}if (!h[0]) return true;ll j;j = 1;for (int i = 1; i <= x; i++){while ((pre[i] - pre[j - 1] - j * k) / (i - j + 1) > h[j]) j++;if (pre[i] - pre[j - 1] - j * k <= g[i - j + 1]) return true;}return false;
}int main()
{scanf("%lld", &T);while (T--){scanf("%lld%lld", &m, &k);for (int i = 0; i <= m; i++) scanf("%lld", &f[i]);for (int i = 0; i <= m; i++) id[i] = i;sort(id, id + m + 1, cmp);for (int i = 2; i <= m + 1; i++){ll x;x = g[i - 1] + k;g[i] = x + (x / (i - 1));}ll l, r, mid;l = 0, r = m + 1;while (l < r){mid = (l + r) >> 1;if (check(mid)) r = mid;else l = mid + 1;}printf("%lld\n", l);}return 0;
}

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

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

相关文章

【硬件测试】基于FPGA的QPSK调制解调系统开发与硬件片内测试,包含信道模块,误码统计模块,可设置SNR

1.算法仿真效果 本文是之前写的文章基于FPGA的QPSK调制解调系统,包含testbench,高斯信道模块,误码率统计模块,可以设置不同SNR_fpga qpsk-CSDN博客的硬件片内测试版本。系统在仿真版本基础上增加了ila在线数据采集模块,vio在线SNR设置模块,数据源模块。硬件ila测试结果如下:…

uml类图总结

类图用于描述系统的静态结构,通过展示类、接口及其之间的关系,以便理解和设计系统 类图的基本元素 1.类(Class):类通常使用矩形框表示,其中包含三部分:类名、属性和方法。示例: 2.接口(Interface):表示方法类似类,但是会在矩形框顶部加上<<interface>>标…

任重道远

2024秋软工实践个人总结这个作业属于哪个课程 https://edu.cnblogs.com/campus/fzu/SE2024这个作业要求在哪里 https://edu.cnblogs.com/campus/fzu/SE2024/homework/13315这个作业的目标 课程总结学号 102201425一、学期回顾 1.1 回顾你对于软件工程课程的想象 在学期开始之前…

基于MPPT最大功率跟踪和SVPWM的光伏三相并网逆变器simulink建模与仿真

1.课题概述基于MPPT最大功率跟踪和SVPWM的光伏三相并网逆变器simulink建模与仿真。包括PV模块,MPPT模块,SVPWM模块,电网模块等。2.系统仿真结果 1不同光照大小的输出电压2不同光照大小的输出功率3不同光照大小的有功功率-无功功率 4不同光照大小的直流母线实时电压 5不同光…

请问云服务器数据库偶尔自动关闭的原因及解决方案

最近两天,我的云服务器上的数据库偶尔会自动关闭。这种情况导致了网站无法正常访问,影响了用户体验。请问这是什么原因引起的?是否有根本性的解决办法? 答案: 您好,根据您的描述,云服务器上的数据库偶尔自动关闭可能是由多种原因引起的。为了帮助您更好地理解并解决问题…

如何解决FTP上传后网站仍显示“正在建站中”的问题?

在使用FTP工具上传网站文件后,您可能会发现浏览器访问网站时仍然显示“正在建站中”的默认页面,而不是您上传的实际内容。这可能是由于文件上传不完整、默认页面未被覆盖或FTP路径设置错误等原因造成的。本文将详细介绍如何解决这一问题,确保您的网站能够正常显示上传的内容…

虚拟主机对外请求接口是否有端口限制?

您好,关于您提到的虚拟主机对外请求接口是否存在端口限制的问题,我们进行了详细的调查和确认。根据我们的了解,大多数虚拟主机服务商并不会对对外请求的端口进行严格限制,但为了确保网络安全和稳定性,仍有一些需要注意的地方。以下是详细的解答:默认端口开放情况: 虚拟主…

[ 2024 CISCN x 长城杯 ] pwn avm

2024 CISCN x 长城杯 AVM avm VM入门题。不过挺吃逆向经验的。之前都是复现,这算是第一次比赛的时候做出vm题。这个题的逆向思路非常经典,所以分享一下。 1.程序逆向 函数主函数如下: unsigned __int64 __fastcall main(__int64 a1, char **a2, char **a3) {_BYTE s[3080]; …

13C++循环结构-for循环(3)

1、回文数; 2、斐波那契数列及长整型 long; 3、逻辑判断与推理; 4、for语句的应用。一、回文数 问题:“地满红花红满地,天连碧水碧连天”是一副回文联,用回文形式写成的对联,既可以顺读,也可以倒读,意思不变。在数学中也存在这样特征的一类数,称为回文数。设n是一任意…

2025年了,你还不会配置Jetson Orin NX嘛?

2025年了,你还不会配置Jetson Orin NX嘛?我的设备为:Jetson Orin NX 16G + JetPack6.1+达妙科技载板 帅气的Jetson Orin NX拿到手了,都2025年了你还不会配置嘛???让我一篇文章带你不糟蹋这一美丽的艺术品!Cuda、CuDNN、TensorRT配置首先我们拿出一块刚刚烧录完的…

uml上机实验 4

一 实验目的  理解顺序图、协作图、活动图、状态机图的概念及其在系统分析设计中的作用;  了解和掌握软件工程中用例逻辑时序的分析方法;  掌握两种交互图(顺序图和协作图)的差别;  掌握描述一个操作执行过程中所完成工作(动作)的方法;  掌握描述对象内部工作…