Solution Set -「LOCAL」冲刺省选 Round VII
\(\mathscr{Summary}\)
三道结论题,毁灭吧。
A 题一开始思路偏了,发现答案最高 bit 能固定之后接下来的结论就顺理成章了。
B 题哈哈哈哈又是经典:我结论猜对了,然后心里给念叨,念着念着嘴瓢了,写暴力出来错了,然后就没分了。
C 题:你怎么不放 A 题?
策略不对头啊哥,你怎么没先发现 C 题最水呢?这样真的很危险。
\(\mathscr{Solution}\)
\(\mathscr{A}-\) 合成小丹
给定可重集 \(A=\{a_n\} \newcommand{\or}[0]{\operatorname{or}} \newcommand{\rsh}[0]{\operatorname{rsh}} \newcommand{high}[0]{\operatorname{high}}\),进行 \(n-1\) 次以下操作之一:
取 \(\{x,y\}\subseteq A\),令 \(A\leftarrow (A\setminus\{x,y\})\cup\{(x\or y)\rsh 1\}\);
取 \(x\in A\),令 \(A\leftarrow A\setminus\{x\}\)。
其中 \(\or\) 是按位与,\(\rsh\) 是右移。最终 \(A=\{r\}\),求出可能的最小 \(r\)。
\(n\le10^5\),\(w=60\),\(a_i\in[0,2^w)\)。
把原问题说好听点:在 $A $ 里选一些数做 1. 操作,最小化结果 \(r\)。根据经验,位运算下的最小化问题很有局部性,我们可以尝试先最小化 \(r\) 的最高 bit。
记 \(\high(x)=\lceil\log_2x\rceil~(x>0)\)。在这一目标下,显然,当且仅当 \(\high(x)=\high(y)\),对 \((x,y)\) 的操作才是有意义的。我们按 \(\high\) 降序模拟,看看最低能在哪个 \(\high\) 处留下一个数。记此时的 \(\high\) 值为 \(h\)。可见,\(\high(r)=h\)。
由于 \((x\or y)\rsh k=(x\rsh k)\or(y\rsh k)\),那么对于每个数 \(x\),若它参与了 \(r\) 的合成,则它至少被 \(\rsh\) 了 \(\high(x)-h\) 次。当然,这一次数的实际值越小,我们就更有可能合成出 \(h\) 最小的 \(r\)。这印证了我们在上文直接按照 \(\high(x)-h\) 这一 \(\rsh\) 次数对 \(x\) 进行的归类的确能求到最小的 \(\high(r)\)。
想一想,被额外 \(\rsh\) 的数就没用了吗?并不。我们可以用它们作为 1. 操作的“炮灰”,让另一个数被 \(\rsh\),甚至,“炮灰”和“炮灰”还能在 1. 操作中合成更“厉害”的“炮灰”。
回到解题,既然 \(\high(r)\) 定了,我们可以从高到低枚举 \(r\) 的 bit,检查这一 bit 能否取 \(0\)(局部性)。根据上文结论,对于每个数 \(a\),我们可以求到它至少被 \(\rsh\) 多少次后,被 \(\or\) 入 \(r\),才不会破坏已经确定的高位 bit 和当前 bit 假定的 \(0\)。被 \(\rsh\) 的次数越小越好嘛,我们直接把这一次数当做 \(a\) 的 \(\high\),在此模拟上文求 \(h\) 的操作,看看能不能把同样的 \(h\) 取出来。若能,则这一 bit 可以为 \(0\)。
暴力实现是 \(\mathcal O(Tnw^2)\) 的,不过瓶颈是位运算和整数自加,而且难卡,所以我过了。对 \(r\) 中每个 \(0\) 分别构造对每个数 \(a\) 的右移次数限制,精细实现可以做到 \(\mathcal O(Tnw)\)。讲个笑话,有人 \(\mathcal O(Tnw^3)\) 过了。
\(\mathscr{B}-\) 路过中丹
对于字符串 \(T\),成一个合法遍历 \(P=p_1\cdots p_k\),满足 \(p_i\in[1,|T|],p_1\neq p_k,|p_i-p_{i-1}|=1\),且 \(T'=T_{p_1}T_{p_2}\cdots T_{p_k}\) 是回文。若 \(T\) 的每个下标都能存在于一个合法遍历中,则 \(T\) 合法。给定字符串 \(S\) 以及 \(q\) 次询问,每次给出 \([l,r]\),询问 \(S[l:r]\) 是否合法。
\(|S|,q\le10^6\)。
手玩一下样例:若存在 \(T_i=T_{i+2}\),则 \(T\) 合法。
证明,构造遍历:\(T_{i+2}\cdots T_2T_1T_2\cdots T_iT_{i+1}T_i\),是回文。另一侧同理。
另一个显然的结论:若 \(T\) 中的每个字符都存在于某个长度大于 \(1\) 的回文串中,则 \(T\) 合法。(草了,我上面那个对了这个胡错了。)
经讨论可以说明:不存在其他有效的遍历方案使得不满足这两个条件的 \(T\) 合法。
怎么维护?第一个结论直接记前缀和。第二个,Manacher + 单调栈求出 \(S\) 中从 \(i\) 开始的最短回文串结束位置 \(r_i\),以及到 \(i\) 结束的最短回文串开始位置 \(l_i\)。\(S[l:r]\) 合法,当且仅当满足第一个条件,或者不存在 \(i\in[l,r]\),使得 \(l_i<l\le r<r_i\)。按照询问右端点离线,BIT 维护一下每个左端点的合法情况即可。复杂度 \(\mathcal O((n+q)\log n)\)。
\(\mathscr{C}-\) 膜拜大丹
有一个有向图 \(G\),结点编号 \(1,2,\dots,n+m\)。对于结点 \(i\in[1,n]\),\(\lang i,n+1..n+{a_i}\rang\in E\);对于结点 \(i\in(n,n+m]\),\(\lang i,1..b_i\rang\in E\);不存在其他边。现限定 \(1..n\) 最多存在于 \(c_{1..n}\) 个简单环中,\(n+1..n+m\) 最多存在于 \(d_{1..m}\) 个简单环中,求能取出多少个简单环。
\(n,m\le5\times10^5\)。
显然:
- 最优情况下,环是二元环;
- 按编号降序选二元环,答案最优。
降序枚举 \(n..1\),维护在 \(n+1..n+m\) 里能作为二元环另一个端点的结点集合,模拟即可。复杂度 \(\mathcal O((n+m)\log m)\)。
Solution Set -「LOCAL」冲刺省选 Round VII的更多相关文章
- Solution Set -「LOCAL」冲刺省选 Round XXV
\(\mathscr{Summary}\) 读错题了读错题了 B 题差点没做出来真的太吓人了. 逆序开题,C 题直接冲一发暴力最大权闭合子图居然过了.A 题确实一下子没想到用"可能的 ...
- Solution Set -「LOCAL」冲刺省选 Round XXIV
\(\mathscr{Summary}\) 名副其实的 trash round,希望以后没有了. A 题算好,确实一个比较关键的简化状态的点没想到,所以只拿了暴力(不考虑 \(\mathcal ...
- Solution Set -「LOCAL」冲刺省选 Round XXIII
\(\mathscr{Summary}\) 有一说一,虽然我炸了,但这场锻炼心态的效果真的好.部分分聊胜于无,区分度一题制胜,可谓针对性强的好题. A 题,相对性签到题.这个建图确实巧妙,多见 ...
- Solution Set -「LOCAL」冲刺省选 Round XXII
\(\mathscr{Summary}\) 和出题人很有缘分但是没有珍惜.jpg A 题有一个显然的二维偏序斜率式,以及显然的 CDQ 套李超树 \(\mathcal O(n\log^2n)\ ...
- Solution Set -「LOCAL」冲刺省选 Round XXI
\(\mathscr{Summary}\) 省选几个小时啊,怎么模拟赛只打三个小时啊./kk 时间安排较为合理,没有出现严重的因思考时间过少引起的丢分. A 题比较可惜,二分 + 点分治大 ...
- Solution -「LOCAL」过河
\(\mathcal{Description}\) 一段坐标轴 \([0,L]\),从 \(0\) 出发,每次可以 \(+a\) 或 \(-b\),但不能越出 \([0,L]\).求可达的整点数. ...
- Solution -「LOCAL」画画图
\(\mathcal{Description}\) OurTeam. 给定一棵 \(n\) 个点的树形随机的带边权树,求所有含奇数条边的路径中位数之和.树形生成方式为随机取不连通两点连边直到全 ...
- Solution -「LOCAL」充电
\(\mathcal{Description}\) 给定 \(n,m,p\),求序列 \(\{a_n\}\) 的数量,满足 \((\forall i\in[1,n])(a_i\in[1,m])\l ...
- Solution -「LOCAL」二进制的世界
\(\mathcal{Description}\) OurOJ. 给定序列 \(\{a_n\}\) 和一个二元运算 \(\operatorname{op}\in\{\operatorname{ ...
- Solution -「LOCAL」大括号树
\(\mathcal{Description}\) OurTeam & OurOJ. 给定一棵 \(n\) 个顶点的树,每个顶点标有字符 ( 或 ).将从 \(u\) 到 \(v\) ...
随机推荐
- 2个月搞定计算机二级C语言——真题(5)解析
1. 前言 本篇我们讲解2个月搞定计算机二级C语言--真题 5 2. 程序填空题 2.1 题目要求 2.2 提供的代码 #include <stdio.h> double fun(int ...
- spring基础配置原则
spring框架本身有四大原则:1.使用pojo进行轻量级和最小侵入式开发2.通过依赖注入和基于接口编程实现松耦合3.通过AOP和默认习惯进行声明式编程4.使用AOP和模板减少模式化代码spring ...
- golang中defer的作用
defer是golang里面一个很有用的语法,但很多人可能都不太清楚它具体应该怎么用.这里记录一下自己学习到的内容. 应用场景 defer一般用于资源释放,当一个资源申请成功后,经常会在后面写一个de ...
- python报错:If this call came from a _pb2.py file, your generated code is out of date and must be regenerated with protoc >= 3.19.0
相关: https://stackoverflow.com/questions/72441758/typeerror-descriptors-cannot-not-be-created-directl ...
- SqlLite查看工具
有时候想查看下sqllite,又不需要功能齐全的客户端,SQLiteSpy是个临时应急的好工具(也许本身功能就很强,没仔细研究). https://files.cnblogs.com/files/ja ...
- 如果一个接口不使用token鉴权,应该怎么保持在登录状态下进行测试?
1.token是接口中用于身份验证和授权的令牌,用户通过登录操作,服务器会返回一个token,这个token会在后续的请求中发送到服务器,用来证明用户的身份和权限. 2.如果接口没有token,可以使 ...
- VUE3刷新页面报错:Uncaught SyntaxError: Unexpected token ‘<‘
今天用vue3配置嵌套路由时,发现刷新页面后,页面变为空白,打开控制台发现报错: Uncaught SyntaxError: Unexpected token '<' 解决方法: 修改vue.c ...
- Mybatis【6】-- Mybatis插入数据后自增id怎么获取?
代码直接放在Github仓库[https://github.com/Damaer/Mybatis-Learning/tree/master/mybatis-05-CURD ] 需要声明的是:此Myba ...
- 使用 wireshark 捕获 请求包
1.出错场景 今天遇到一个问题,在用户登录时,发现用户在登录的时候,一个用户登录正常,一个用户登录报错,报错的原因时400错误,分析对比发现一个用户的分配用户组多,一个分配的少,其中多的那个出错了. ...
- HTML5 进度条
1. <progress>标签 进度条 value属性:规定进程的当前值.默认为0 max属性:规定需要完成的值. PS:这里没有最小值设置,或者说最小值一律为0 <progress ...