2024 ICPC 上海站(BCDGI)

news/2025/2/5 2:01:25/文章来源:https://www.cnblogs.com/jjjxs/p/18664720

第一场区域赛,惨遭打铁。赛时只出了BCG。赛后补了DG,发现两道题都没有那么难,只能说还得加训。。。

\(C,I\)相对简单一些,就不写题解了。

code_C

B

补得最难绷的一题。先写了一个栈维护\(dfs\)路径的写法,\(TLE15\);又写了一个\(set\)维护结点之间访问关系的写法,\(TLE26\)

我的做法就是维护当前正在搜索的路径,对于下一步搜索的方式,有几种可能性:(设当前走到了点\(u\),下一个目标点为\(v\)

  1. \(u\),\(v\)之间有边 -> 直接走\(u,v\)
  2. \(u,v\)之间无边,但\(u\)可以直达一个未访问过的结点(即不在当前路径上的点)->一定非法,必须要加一条新边\((u,v)\)
  3. \(u\)之后的结点均已被搜索过 -> 回溯并重复1,2过程。若发现最后回溯到的所有点均无法继续走,则说明这个联通块内的点均已被搜索过。则由题可知直接对目标点所在的另一个联通块\(dfs\)即可,不需要加新边。

我的所有写法都离不开一个致命问题 —— 即需要线性(或者说暴力)维护当前搜索的路径(要想优化维护可能需要一些\(ds\),但不知道咋写),导致可能有些数据会一直让我卡在暴力回溯的部分而\(TLE\)

最后还是屈服于了递归,写了一个递归来简化维护回溯路径的写法,直接就过了。

ACcode

TLE on 26 code

D

逆天构造题,借用其他博客上的方法补出来了。

可以发现,只要能变换到结尾两个数字都是\(0\)的情况,就一定可以将所有数字都变为\(0\):只需要倒序把剩下的\(1\)都变为\(0\)即可。

所以问题转化为找到一种操作方式,使得结尾两个数字都为\(0\)

\(n==3\)的时候特判一下,剩下的情况均为\(n>=4\)

只考虑最后的\(4\)个数字,除了最后两个均为\(0\)的情况一定可行,还剩下\(12\)种情况,其中\(5\)种情况可行,\(7\)种情况不可行。具体见代码。

可行的情况一定为\(Yes\),但不可行的情况不一定为\(No\)。因为在这\(4\)个字符前面的字符也可以对这\(4\)个字符产生影响。具体如何影响,需要看从左到右可以过来多少个\(1\)。而对于不可行的\(7\)种情况,是否可以变为可行,也取决于前面可以过来\(1\)的数量。具体可以自己模拟一下。

而如何计算结尾\(4\)个数字之前的串能过来多少个\(1\),这个类似于括号匹配:把\(1\)当成左括号,\(0\)当成右括号。每一个\(0\)可以抵消掉其左侧的一个\(1\)。从\(str[0到n-5]\)遍历一下,就可以得出最多可以有多少个连续的\(1\)结尾,即上述“前面可以过来\(1\)的数量”。

code

G

中位数二分 + 贪心

显然可以二分答案,设正在二分的答案为\(mid\),则可以根据\(mid\)来得到每一条直线能匹配的最大\(or\)最小的\(x\)

具体地,对于\(a>0\)的直线,任意\(x >= (mid - b) / a\)均满足\(y>=mid\);而对于\(a < 0\)的直线,任意\(x <= (mid - b) / a\)均满足\(y>=mid\)\(a==0\)时,与\(x\)无关,只有\(b >= mid\)时满足\(y >= mid\)。将所有\(a > 0\)的直线对应的\(x\)放入\(pos\)数组中,将所有\(a < 0\)的直线对应的\(x\)放入\(neg\)数组中;

故将直线按照斜率分成\(3\)组:\(>0,<0和=0\)。则剩下的问题就是将\(c\)数组表示的竖线与求得的\(x\)一一匹配,使得\(y>=mid\)的交点数量尽可能多。

显然有一个贪心的想法:\(a<0\)的直线尽可能匹配较小的\(x\)\(a>0\)的直线尽可能匹配较大的\(x\)(证明略)。因此将\(c\)数组排序后,将\(pos\)数组与\(c\)的后缀作最大匹配,\(neg\)数组与\(c\)的前缀作最大匹配,再加上\(a==0\)的情况,即为最大的\(y>=mid\)的交点数量。与\((n + 1) / 2\)作比较并调整二分边界即可。

作最大匹配的过程:尽可能把容易匹配的点先作匹配,而不是直接按照顺序作一一匹配(易错!)-> 双指针匹配即可。

代码方面要注意两个问题:

  1. 对于二分的\(mid\),每条直线得到的\(x\)要根据值的正负和直线斜率的正负做到正确取整。具体见代码。
  2. 二分边界要取大一些,这个暂时还没懂为什么。

code

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

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

相关文章

λ-calculus的归约

\(\newcommand{\l}{\lambda}\)在之前的讨论中,我们用等号\(=\)表示“可以演算得到”,并且规定等号具有自反、对称、传递的基本性质。这就意味着,我们不仅可以说\((\l x.xx)N\)能演算得到\(NN\),根据对称性也可以说\(NN\)能演算得到\((\l x.xx)N\)。后者听上去很奇怪,因为与…

CubeMX 生成代码 在VScode 中显示未定义,解决办法

CubeMX 生成代码 在VScode 中显示未定义,解决办法CubeMX 生成代码 在VScode 中显示未定义,解决办法 1. 背景 CubeMX 生成代码 在VScode 中显示未定义,未定义、头文件路径无效,在当实际上是可以编译成功的。 2. 原因 keil软件编译器会预编译一些头文件,vscode没有编译 3. 解…

从《だから僕は音楽を辞めた》到《エルマ》

《エルマ》专辑访谈从《だから僕は音楽を辞めた》到《エルマ》 从专辑制作实况到更深层的乐器与演奏方式的执着,除了n-buna、suis之外,支援ヨルシカ的下鹤光康(吉他)、キタニタツヤ(贝斯)、Masack(鼓)、平畑彻也(钢琴)六人畅谈一切。超过一万五千字的特别专访。首先想…

vscode+edie插件配置STM32开发环境,彻底摆脱KEIL

安装 首先去vscode官网下载适合自己的安装包,一般来说选择 User Installer x64 即可,具体安装过程请参考其他教程,此处不再赘述: Vscode官网安装完成后打开,在左侧边栏打开插件市场,搜索并安装如下四个插件:C/C++ (C语言代码提示的核心插件) Chinese (中文显示) Emb…

本地部署DeepSeek并用Python调用

本地部署DeepSeek并用Python试调用之,总体来说过程比较顺畅。目录需要下载的软件安装步骤安装Ollama并运行模型DeepSeek安装Hollama试用python调用 需要下载的软件OllamaSetup.exe(Ollama是一个管理和运行大语言模型的开源工具) Hollama_0.25.1-win-x64.exe【可选】(Hollam…

12 网络编程详解

知识预备网络通信 :​ 网络通信是指,将一台设备(Host1)中的数据通过网络传输到另一台设备(Host2)。java.net 包下提供了许多用于完成网络通信的类或接口。 ​ 相关流程图如下 :网络 :​ 两台或两台以上的设备通过一定物理设备(交换机,网关服务器等等)连接起来…

25.2.4小记(FoxandRabbit代码复现)

1.接口(interface)不仅可以用于定义方法的签名,还可以充当类型的一部分。其本身可以作为类来引用 eg.Cell[][] field 数组中的对象是实现了这个接口的类的实例。 是一种特殊的classreturn list.toArray(new Cell[list.size()]);中list.toArray是将原来的数组填充到()中的对…

2015 纯碱

回调后有一波多头行情

2015 锰硅

年后回调后有波多头行情 具体等交易系给出信号

2024 山东一轮省集组合计数选讲学习笔记

https://www.luogu.com/article/hcy6mqry 初等双射 通常的方法是构造一个不会映射到自己的对合,这样就就可以把所有的组合对象分为数量相等的两类。 还有一种方法就是给等式两边找到一个相同的组合意义,以证明他们相等,这个不一定是一个映射,它允许“一对多”“多对一”。 …

TCP和UDP协定的基础知识解析,从网路效能到网路安全看TCP、UDP协议

TCP和UDP协定的基础知识解析,从网路效能到网路安全看TCP、UDP协议TCP和UDP协定是网路通讯中不可或缺的基础。 TCP以其可靠性著称,能够确保资料完整传输,适合文件传输和邮件服务等场景。它透过建立连接和确认机制,提供稳定的通讯体验。相比之下,UDP更注重速度和即时性。它无…