首页 > 其他分享 >01.03 CW 模拟赛 T2. game

01.03 CW 模拟赛 T2. game

时间:2025-01-03 20:35:22浏览次数:1  
标签:T2 Alice 起手点 game 01.03 枚举 mathcal rm Bob

思路

先把赛时的思路搬一下


你发现确定两个人的起始点, 其实是可以确定 \(\rm{Alice}\) 的选点可能的, 考虑写个代码验证一下
具体的, 就是分成两个弧, \(\rm{Alice}\) 可以选择一个弧的优势(过半), 然后其他的劣势

感觉现在是猜结论, 全靠感性, 我也不知道怎么解释这个问题

那么这样枚举两个起始点, 好像是 \(\mathcal{O} (n^2)\) 的?

具体的

  • 两边都是奇数个 : 可以选择两种方式, 选取一边的超过一半和另外一边的少于一半
  • 两边都是偶数个 : 唯一情况分一半
  • 一奇一偶 : 唯一情况多吃一点

所以这样子打下来, 可以知道 \(\rm{Alice}\) 确定唯一占领时, \(\rm{Bob}\) 怎么选才能最大化自己, 然后就知道答案了

做到 \(\mathcal{O} (n^2)\) 唯一需要的是考虑环上的和怎么快速计算
首先是枚举两个分割点
如何把两边分开 : 断环为链拷两遍
如何计算和 : 前缀和
如何快速计算分一半 : 计算编号之差

我们细致一点方便写代码:
首先读入这个环的时候就将其断开复制两遍
枚举 \(\rm{Alice}\) 的起手点 ( \(\rm{subtask} \ 3\) 直接钦定为 \(1\) ), 对于这个点我们枚举 \(\rm{Bob}\) 的所有起手点, 然后我们可以找到这个起手点的两个位置, 显然的根据上面的分类讨论

  • 两边都是奇数个 : 可以选择两种方式, 选取一边的超过一半和另外一边的少于一半
  • 两边都是偶数个 : 唯一情况分一半
  • 一奇一偶 : 唯一情况多吃一点

还有一个问题 : 如何在链上找到两个起手点
其实很简单, 假设两个起手点 \(u < v\) , 直接找到 \(v\) 第二遍复制的位置即可

然后检查答案即可

注意同 \(\rm{Alice}\) 起手点之间取 \(\min\) , 不同之间取 \(\max\)


考虑优化到可接受的时间复杂度

因为你枚举 \(\rm{Alice}\) 的起手点已经 \(\mathcal{O} (n)\) 了, 那么你找到 \(\rm{Bob}\) 的起手点使得答案取 \(\min\) 一定要做到 \(\mathcal{O} (1)\)
这个看起来非常不可能啊, 但是实际上如果你更加理性是想得到的

考虑 \(\rm{Alice}\) 选择起手点之后, \(\rm{Bob}\) 能够做到怎样限制 \(\rm{Alice}\) 的选段
还是考虑上面的这些性质, 放到整体上来做

对于 \(\rm{Alice}\) 的一个起手点, 事实上我们可以找到 \(\lceil \frac{n}{2} \rceil\) 个连续的弧, 对于 \(\rm{Bob}\) 的所有起手点选择, 其实一定可以将其限制到这 \(\lceil \frac{n}{2} \rceil\) 个连续的弧中弧内和最小的一个, 具体的, 按照上面的规则反推即可


问题简化为, 对于每个点 \(i\) , 找到覆盖 \(i\) 的所有长度为 \(\lceil \frac{n}{2} \rceil\) 的弧中, 弧内和最小的一个

怎么解决?
可以预处理出所有长度为 \(\lceil \frac{n}{2} \rceil\) 的弧长, 然后队列维护即可, 不困难
对于枚举的所有点, 我们单调队列处理弧的情况, \(\rm{belike}\) :
pEpJWcV.png

但是你发现这和普通的队列枚举并不太相同, 即到了后面会加入最初被删除的线段
类似于断环为链, 事实上我们可以拷贝两份弧, 仅仅需要 \(\mathcal{O}(n)\) 的空间

考虑怎么维护这种神秘玩意, 你注意到就是一个滑动窗口, 那岂不是无敌了, 直接单调队列做

实现

框架

我们细致一点方便写代码:
首先断环为链, 复制一份接到后面
然后跑弧长, 然后跑单调队列优化

代码

不打算这么困的时候挑战我的码力了

总结

这个题不给 \(\rm{subtask \ 3}\) 我可能会直接搞到正解, 也有可能一分不得???

暴力算法的优化往往需要更整体的思考
不行打表找规律

滑动窗口类问题, 单调队列是好东西

标签:T2,Alice,起手点,game,01.03,枚举,mathcal,rm,Bob
From: https://www.cnblogs.com/YzaCsp/p/18650855

相关文章

  • 25.01.03
    喜欢我\(O(n^2\log^2n)\)过\(2e5\)吗......
  • 01.03 CW 模拟赛 T1. math
    前言赛场上\(\rm{while}\)打成\(\rm{if}\)痛失\(40\rm{pts}\)不过下来看是贪心的话也没什么好做的了,一般都不会对了这是题目题目下载\(\rm{sol}\)方法\(1\):逐位计算思路显然的是你需要把数字从大到小填入,使得高位的数尽量大,这个显然由上面的结论可以知道......
  • 2025.01.03 LGJ Round
    A一个序列\(a\),你需要对其每个前缀计算:至少要多少次交换相邻元素的操作使得序列变为“单峰”,即由一个递增序列和一个递减序列拼起来。\(n\le5e5\)。我一开始的想法是:枚举切点,左边的数排序成递增,右边的数排序为递减,贡献是逆序对+正序对。然而这是错误,因为不保证左边的某个数去......
  • modbus slave为例,使用zabbix agent2 添加modbus 插件
    从zabbix6.0开始,modbus成为了官方的默认集成,modbus协议广泛的用于工业设备。本文前提:zabbix6.0服务器,zabbix6.0agent2主机,一个运行modbusslave软件(一款modbus仿真软件,本例中用其输出modbustcp协议)的windows主机实际中一般需要串口服务器+modbus设备,将modbusrtu协议转换......
  • 题解 - 机会成本(2022.9上海月赛丙组T2)
    题目描述明天有门考试,今晚只能复习一门课,请计算应该复习哪一门课,才能让所有考试的分数总和达到最大,如果选择复习第之门课,则这门课的考试分数为a;,若放弃复习第之门课,则这门考试的分数为6;。输入格式第一行:单个整数表示n第二行到第n+1行:每行两个整数表示a;......
  • 【开源】基于SpringBoot框架教学资料管理系统(计算机毕业设计)+万字毕业论文 T286
    系统合集跳转源码获取链接点击主页更能获取海量源码10年计算机开发经验,主营业务:源码获取、项目二开、语音辅导、远程调试、毕业设计、课程设计、毕业论文、BUG修改一、系统环境运行环境:最好是javajdk1.8,我们在这个平台上运行的。其他版本理论上也可以。IDE环境......
  • 【开源】基于SpringBoot框架火车票订票系统(计算机毕业设计)+万字毕业论文 T289
    系统合集跳转源码获取链接点击主页更能获取海量源码10年计算机开发经验,主营业务:源码获取、项目二开、语音辅导、远程调试、毕业设计、课程设计、毕业论文、BUG修改一、系统环境运行环境:最好是javajdk1.8,我们在这个平台上运行的。其他版本理论上也可以。IDE环境......
  • opencv vector<vector<Point2f> > imagePoints[2]怎么解释
    在OpenCV中,vector<vector<Point2f>>imagePoints[2];通常用于存储图像中的特征点,尤其是在立体视觉或相机标定等应用中。下面是对这个数据结构的详细说明。结构解析vector<vector<Point2f>>:这是一个二维向量,表示一个向量的向量。Point2f是一个表示二维点的结构,包含x......
  • R语言ggplot2可视化实战:分面图(faceting)使用label_wrap_gen函数设置每个分面图的子图标
    R语言ggplot2可视化实战:分面图(faceting)使用label_wrap_gen函数设置每个分面图的子图标题自动换行为多行文本(基于设定的当行宽度进行标题文本自动换行)目录ggplot2可视化分面图(faceting)使用label_wrap_gen函数设置每个分面图的子图标题自动换行为多行文本(基于设定的当行宽度进......
  • 关于Chat2DB的吐槽
    最近心血来潮准备支援原子一波、看着多出来一个选项联合会员chat2db、于是纳闷chat2db是个啥东西于是下载下来试用了一下,怎么说呢、不好评价​ SQL优化功能:一股浓浓的AI味,跟你直接问ChatGpt差不多。​ sql提示也没想象的好、自然语言转sql更是难用、不如直接自己写​ 最后试下......