首页 > 其他分享 >MEX Game 2 (Hard Version)

MEX Game 2 (Hard Version)

时间:2024-12-27 22:20:55浏览次数:3  
标签:pre cnt sum Hard ldots Game Version ll rightarrow

[CF1943E2]MEX Game 2

下文中称 \(\text{Alice}\) 为 \(L\),\(\text{Bob}\) 为 \(Q\)。

题意

有 \(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;
}

标签:pre,cnt,sum,Hard,ldots,Game,Version,ll,rightarrow
From: https://www.cnblogs.com/Rainbow-Prism/p/18636824

相关文章

  • C5GAME 游戏饰品交易平台借助 RocketMQ Serverless 保障千万级玩家流畅体验
    作者:邹星宇、刘尧C5GAME:安全便捷,国内领先的游戏饰品交易平台C5GAME游戏饰品交易平台(www.c5game.com)是国内领先的STEAM游戏饰品交易的服务平台,专注于CS:GO以及DOTA2等热门游戏装备C2C中介交易。自网站上线以来,C5GAME凭借其安全便捷的交易和流畅友好的体验,迅速在玩家......
  • 为孩子准备的 第一个python编程学习案例-pygame小游戏
    为孩子准备的第一个python编程学习案例python安装IDE安装thonny开发第一个小游戏-避坑指南最终运行通过的小游戏参考想指导孩子进行python编程启蒙,自己研究了一下如何从零搭建python开发环境、安装配置基本库并运行一个游戏示例.python安装安装最新版本的python,......
  • PendingIntent 问题:Targeting S+ (version 31 and above) requires that one of FLAG_
    问题描述与处理策略1、问题描述TargetingS+(version31andabove)requiresthatoneofFLAG_IMMUTABLEorFLAG_MUTABLEbespecifiedwhencreatingaPendingIntent.StronglyconsiderusingFLAG_IMMUTABLE,onlyuseFLAG_MUTABLEifsomefunctionalitydepen......
  • pygame基础功能总结
    1.导入Pygame模块(1) 模块并初始化① Importpygame② Pygame.init()(2) 创建窗体① Window_size=(800,600) 长宽② Screen=pygame.disply.set_mode(Window_size)③ pygame.disply.set_caption(“MyFirstPygameWindow”) 设置窗体标题(3) 主循环① Ru......
  • webpack 使用hard-source-webpack-plugin缓存编译文件,加快编译速度
    hard-source-webpack-plugin是一个为webpack提供中间缓存功能的插件。它可以将模块的编译结果缓存到磁盘中,这样在后续的编译过程中,如果模块的源代码没有发生变化,就可以直接使用缓存的结果,从而加快编译速度。插件地址https://www.npmjs.com/package/hard-source-webpack-plugi......
  • Oray Virtual Game Controller 驱动程序的主要目的是在没有物理游戏控制器的情况下,通
    OrayVirtualGameController是由OrayTechnologies,Inc.开发的一个虚拟游戏控制器驱动程序。它的版本为1.0.0.0,并且该驱动程序的发布日期是2022年12月29日。OrayVirtualGameController驱动程序简介功能:虚拟游戏控制器 是一种虚拟设备,允许通过软件模拟游戏控制......
  • USACO24DEC Cake Game S 题解 [ 黄 ] [ 前缀和 ] [ adhoc ]
    CakeGame:小清新前缀和题,但是我场上想了半天优先队列贪心假完了/ll/ll/ll。观察本题有三个重要的结论,我们依次进行观察。不难发现,第二个牛一定会拿\(\frac{n}{2}-1\)个蛋糕走。同时它拿走的蛋糕一定是左边一段、右边一段。如果它要使自己的分数最大化,那么显然就是要将左边和......
  • 控制反转(Inversion of Control,IoC)
    依赖注入(DependencyInjection,DI)和控制反转(InversionofControl,IoC)是软件工程中两个相关但不同的概念。它们都旨在提高代码的模块化、可维护性和可测试性,但它们的侧重点和实现方式有所不同。控制反转(InversionofControl,IoC)定义:控制反转是一种设计原则,它将对象的创建和依赖......
  • nvm: Node Version Manager
    HowtoinstallDownloadthenvm-setup.zipfromthefollowingURL https://github.com/coreybutler/nvm-windows/releasesExpandandrunnvm-setup.exeUsenvmversionconfirmnvm-vCheckingtheNode.jsVersionAvailableforInstallationnvmlsavailableInsta......
  • 关于stm32f407 cherryusb初始化失败“This dwc2 version does not support dma mode,
    初学cherryusb,照着论坛帖子操作,将cherryusb软件包加入到407工程,编译完成后,下载,出现如下问题:[I/USB]dwc2has1channelsanddfifodepth(32-bitwords)is0[E/USB]Thisdwc2versiondoesnotsupportdmamode,sostopworking通过反复确认,各种定位尝试,最终发现是usb模......