牛客寒假基础算法训练营1(EFIKLM)

news/2025/2/4 9:42:02/文章来源:https://www.cnblogs.com/jjjxs/p/18684313

赛时\(8\)题(实际上是\(7\)题,有道题数据水而被\(fst\)了...)

E

这道题赛时做出来了,但看题解时看到了一个值得学习的重要结论。

结论:要将一个数组中的所有数变为相同的数\(x\),操作为加\(1\)或减\(1\),那么最小代价 \(<->\) \(x\)是中位数。

(若不知道这个结论做这个问题,可以将所有数当成若干在数轴上的点,固定点为\(x\),则显然\(x\)从负无穷到正无穷的过程中,代价是先减后增的山谷形,这样就可以用 三分 或者 二分斜率 来解决这个问题)。

证明:由括号内容可知最小代价和最终值的二元函数呈山谷形,故这个最终值一定是唯一的。假设这个值不是\(median\)。则:

  1. \(val > median\)时,数组中比\(val\)小的元素个数\(>\)\(val\)大的元素个数(中位数的性质),前者通过加\(1\)达到\(val\),后者通过减\(1\)达到\(val\)。则将\(val\)减少\(1\),会使所有比\(val\)小的元素各减少一个代价,同时会使所有比\(val\)大的元素各增加一个代价。由于比\(val\)小的元素个数比\(val\)大的元素个数多,故总代价是减少的。因此最优解一定\(<val\)
  2. \(val > median\)时,与\(1\)完全类似的证明,可以证得最优解一定\(>val\)

得证。

code

F

双指针 + 前缀和技巧

要想用传统的“枚举右端点,二分左端点”的套路统计贡献,就必须要发现一些单调性。而可以发现,对于固定的右端点,左端点越偏左,子区间内包含的数的种类就会越多。而所规定的子区间恰好要满足包含种类数为\(2\)这一性质,因此可以采用这个套路。

可以用\(map\)\(size\)函数快速获得要维护区间的数的种类数。

剩下的问题就是要判断子区间内两种数的数量是否相同。这里有个比较巧妙的\(trick\):将原序列的数转化为\(-1\)\(1\)的映射,这样只需要统计区间和为\(0\)的区间个数,即\(pre[l]==pre[r]\)的个数。那怎么建立这个映射呢?

可以发现,只需要顺序遍历序列,对于不同的数,\(1\)\(-1\)交替赋值即可。由于能够保证子区间的数的种类数最多是\(2\),进而可以保证两种不同的数会被分别赋为\(1\)\(-1\)。具体实现见代码。

维护区间内的前缀和数组信息时要特别注意\(pre[0]\)的维护。

code

I

code

K

\(ST\)表区间\(gcd\) + 二分 + 查询\(trick\)

与F题做法类似:区间\(gcd\)明显具有单调性,因此可以采用“枚举右端点,二分左端点”的套路。

而还要记住区间\(gcd\)的另一个重要性质:对于一个数组的所有子数组,不同\(gcd\)的数量最多为\(O(nlogA)\)\(A\)为数组中最大元素。

证明:对于某个特定的右端点\(r\),考虑所有左端点\(1<=l<=r\),所表示的\([l,r]\)区间:它们的\(gcd\)必然均为\(a[r]\)的约数。而\(a[r]\)\(>1\)因子数量应为\(O(logA)\)级别,在左端点不断往左扩展时,\(gcd\)值减小,且是按因子个数不断减小的(相当于每次减小会除以某一个因子,这是证明该性质的关键!)因此,所有不同的\(gcd\)个数不会超过\(a[r]\)的因子的个数,即\(logA\);对于所有的右端点均是这样,因此所有子区间的不同\(gcd\)个数约为\(nlogA\)个。

这样,对于每一个右端点统计贡献时,就可以暴力寻找每一个左端点,当然也不是纯暴力,需要利用\(ST\)表+二分来找,由上述证明知寻找次数不超过\(logA\)次。

这样,问题就转化为:已知若干 右端点固定,左端点连续 的区间\(gcd\)\(G\),找其中异或和也为\(G\)的区间数量。

不难想到前缀异或和来优化这件事情,即对于区间\([l,r]\)

\(prexor[r]\) ^ \(prexor[l - 1] = G\)

由异或交换律,将\(prexor[r]\)移到左边,得:

\(prexor[l - 1] = G\) ^ \(prexor[r]\)

问题转化为求左端点\(l - 1 <= x <= r - 1\)(注意有偏移,因为求前缀和的左端点是需要偏移的),\(prexor\)值为 \(G\) ^ \(prexor[r]\)的位置\(x\)的个数。这个可以用在\(map套vector\)上二分来做到静态查询。具体见代码。

code

L

code

M(不会证明)

\(fst\)的那道题。赛时猜了个结论没想到直接就过了,赛后才发现自己对这道题还缺乏很多思考。

首先有个结论:最小值是一定要乘2的。这个证明到现在还是不太会,只能靠感性理解。

知道了这个结论,就不难想到每次从最小值位置开始,暴力地向次小值位置扩展区间并更新答案。

code

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

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

相关文章

FFT+NTT入门

这是一个题图真的只是入门。 可能会接着更 分治FFT 或者 任意模数NTT? 前置知识 复数 也可以参考高中数学课本,这里只会介绍 fft 需要的(默认已经入门复数)。 多项式的相关概念。 点值表示法:假设 \(f(x)\) 是一个 \(n-1\) 次多项式,那么将 \(n\) 个 不同的 \(x\) 代入,…

Traefik新一代反代服务器,兼容所有主要的集群技术(二)

简介 笔记将记录如何使用docker配置traefik,代理一个gitea,自动申请tls证书,cloudflare反代80,443端口一系列实操。 daemon.json配置如下,主要是为了IPv6能访问,以及更改了主存储位置,配置了docker代理。{"data-root": "/storage/docker","ipv6…

macbookpro m3本地部署DeepSeek模型

macbookpro m3有着十分强大的性能。在deepseek如火如荼的当下,可以尝试在本地部署并使用。还可以将自己的文档作为语料喂给deepseek,使其能成为自己专属的AI助手。 本文介绍使用ollama在本地部署deepseek模型,并使用chatbox优化访问的步骤。 下载ollama https://ollama.com …

基于生成式AI的访问控制, 迁移传统安全策略到基于LLM的风险分类器

基于规则的风险分类风险分类是网络安全系统的核心能力之一,它将访问请求和命令映射到其风险级别/类别:高(High)、中(Medium)、低(Low)。目前,即便是在大规模环境中,风险分类器仍主要采用基于规则的系统实现。基于规则的分类器易于以符合人类直觉的方式定义——这也使…

坐标系与向量

坐标系规定 一般使用左手坐标系,+x,+y,+z分别指向右方、上方、前方。 多坐标系 世界坐标系:协议某个点为原点,其他所有点都有具体不变的坐标,能够用世界坐标系描述其他坐标系的位置,而不能使用更大的、外部的坐标系来描述世界坐标系。 物体坐标系:和物体相关联的坐标…

Netty实战入门教程

概述 Netty 是一个异步的、基于事件驱动的网络应用框架,用于快速开发可维护、高性能的网络服务器和客户端 Netty 在 Java 网络应用框架中的地位就好比:Spring 框架在 JavaEE 开发中的地位 以下的框架都使用了 Netty,因为它们有网络通信需求!Cassandra - nosql 数据库 Spark…

FFT入门

这是一个题图前置知识 复数 也可以参考高中数学课本,这里只会介绍 fft 需要的(默认已经入门复数)。 多项式的相关概念。 点值表示法:假设 \(f(x)\) 是一个 \(n-1\) 次多项式,那么将 \(n\) 个 不同的 \(x\) 代入,可以得到 \(n\) 个 \(y\)。这 \(n\) 个点对 \((x,y)\) 唯一…

GPUStack:一个开源的GPU集群管理和自动化部署大模型的LLM服务平台

正如我们以前文章中说过,在过去近两年中,AI发展速度超过任何历史时期,基于大模型的各类应用已经渗透到了各行各业中,很多企业都在积极探索如何利用大模型提高公司运营管理的能效。 阿里云 CTO 周靖人也说过““当下企业应用大模型存在三种范式:一是对大模型开箱即用,二是…

Deskflow:一个能在多个设备之间共享鼠标键盘的工具

有多台设备的同学肯定都感受过切换鼠标和键盘的痛苦。比如家里有个台式机配了键盘和鼠标,工作有台笔记本,但是如果想用家里的键盘和鼠标操作笔记本那么除了插拔线(蓝牙也一样),好像没有其他特别的办法。 以为我个人为例,插拔切换鼠标键盘,最头疼的就是以下两个点: 线缆…

DeepSeek + Dify :零成本搭建企业级本地私有化知识库保姆级喂饭教程

最近,DeepSeek大火,想必大家都有所耳闻,各路媒体从各个方面报道了DeepSeek这家神秘的公司的各方面消息,这家低调的技术公司用一组硬核数据回应了所有关注: 千亿参数规模下实现0.5元/百万tokens的API调用成本,91.5%的中文基准测试得分,推理效率较传统架构提升5倍。 DeepS…

[Tools] Vite intro

Overview为什么选Vite: https://cn.vite.dev/guide/why.htmlesbuild, Rollup: https://cn.vite.dev/guide/why.html#why-bundle-for-production Quick start 1. Start a new project pnpm init 2. installl Vite, Typescript pnpm add vite typescript -D 3. create index.ht…