首页 > 其他分享 >牛客小白月赛108 题解(出题人题解)

牛客小白月赛108 题解(出题人题解)

时间:2024-12-27 21:52:58浏览次数:5  
标签:... le 题解 牛客 108 text 等于 区间 2k

比赛链接

A

  • $y=0$ 的情况,答案是 $0$。
  • $y>0$ 的情况,我们把每两次按钮先捆绑在一起,算出 $k=\lceil \frac{y}{x+1} \rceil$。
    • 然后判断是否可以在前 $2k-1$ 次就完成任务,即判断 $(k-1)(x+1)+1 \ge y$。
    • 如果上式成立,答案是 $2k-1$,否则是 $2k$。

B

提供一个比较暴力的做法。对于至少有两位的数字,它是 $4$ 的倍数,等价于最后两位组成的数是 $4$ 的倍数。

记录出现的所有数位(以及次数),然后枚举 $1 \le i,j \le 9$。

  • 如果 $i \neq j$,那么可以输出 YES 的条件是 $10i+j$ 是 $4$ 的倍数,且数位 $i,j$ 都有在原数出现。
  • 如果 $i = j$,那么可以输出 YES 的条件是 $10i+j$ 是 $4$ 的倍数,且数位 $i$ 在原数出现至少两次。

注意特判一位数的情况。

C

由第一个式子:异或和不是 $0$,那么它一定大于 $0$。

将这个不等式代入第二个式子,那么必有:$\text{lcm}{(c_1,c_2,...,c_m)} < 2\times \min(c_1,c_2,...,c_m)$。

而最小公倍数一定是序列每个数(包括最小数)的倍数,因此 $\text{lcm}{(c_1,c_2,...,c_m)}=\min(c_1,c_2,...,c_m)$。

所以,要求 $c_1,c_2,...,c_m$ 每个数相等。

然后别忘了异或和不是 $0$,结合上一行的结论可知我们只能选奇数个相等的数。

所以如果某个数在序列出现奇数次可以一次删空;如果出现偶数次就需要删除两次(偶数 = 1+奇数)。

D

为了让 $\text{MEX}$ 尽量大,我们应该让所有不为 $0$ 的 $t_i$ 值都不一样。

同时我们想要所有数的和尽量小,根据贪心策略,对于越大的 $t_i$ ,对应的 $i$ 应该越小。

例如,我们想要让 $\text{MEX}$ 等于 $4$,构造的总和最小的序列是 $1,1,1,2,2,3$,这样 $t_1=3,t_2=2,t_3=1$。

因此,当 $\text{MEX}$ 等于 $k+1$ 时,$M$ 的下限应该是 $v_k=$ $\sum_{i=1}^k i(k-i+1)=\frac{k^2(k+1)}{2}-\frac{k(k+1)(2k+1)}{6}+\frac{k(k+1)}{2}$。

化简后是 $v_k=\frac{k^3+3k^2+2k}{6}$。

对于每个询问,可以二分出最大的一个不超过 $M$ 的 $v_k$,输出 $k+1$ 即可。注意二分过程不要溢出了。

P.S. 由于这个数这是 $O(k^3)$ 级别的,也可以暴力求出所有在 $10^{18}$ 以内的 $v_k$。

E

对于一个节点 $x$,它的颜色会波及到 $1$ 与 $x$ 的链上所有点的贡献。

假设 $p$ 初始的子树内红点有 $r_p$ 个,蓝点有 $b_p$ 个。假设节点 $x$ 在 $p$ 节点的子树内。

  • 若 $x$ 由红变蓝,且 $r_p-b_p \ge 2$,那么 $D(p)$ 会减少 $2$。
  • 若 $x$ 由红变蓝,且 $r_p -b_p \le 0$,那么 $D(p)$ 会增加 $2$。
  • 若 $x$ 由蓝变红,不等式左边改成 $b_p-r_p$ 即可判断。

因此我们 DFS 两次。

  • 第一次统计每个节点所在子树的红蓝点个数。
  • 第二次对于每个 $x$,树上前缀和求出 $1$ 到 $x$ 的链上每个点 $p$ 中,满足 $r_p-b_p \ge 2$,$r_p-b_p \le 0$;$b_p-r_p \ge 2$,$b_p-r_p \le 0$ 的点数。根据节点 $x$ 颜色的变化情况得到 $D(p)$ 的变化量,再根据变化量的正负统计答案数。

 

F

利用若干个 vector 分别记录每个值的出现位置集合。我们先把原序列每个数取出,然后按照数值**从大到小**的顺序把数字放回。

放回的过程中,假设当前考虑等于 $k$ 的数(先不放回),那么所有满足 $a_i=a_j=k$ 的区间 $[i,j]$,里面放回的数都大于 $k$。

所以每个区间的贡献,等于放回区间内的数的个数。求完贡献后把所有等于 $k$ 的数放回。

以上操作可以用树状数组快速维护、查询。

区间数太多了怎么办?$d(i,j)$ 怎么乘上去?我们可以只先关注**极小有效区间**,即满足 $a_i=a_j$ 但中间不存在等于 $a_i$ 的数的区间 $[i,j]$。

区间长度为奇数,等价于左右端点的奇偶性相同;区间长度为偶数,等价于端点的奇偶性相反。

所以对于极小区间 $[i,j]$,假设四个量,这都可以用线性复杂度求出:

  • $[1,i]$ 中等于 $a_i$ 且下标是奇数的元素个数 $x$; 
  • $[j,n]$ 中等于 $a_i$ 且下标是奇数的元素个数 $y$; 
  • $[1,i]$ 中等于 $a_i$ 且下标是偶数的元素个数 $z$; 
  • $[j,n]$ 中等于 $a_i$ 且下标是偶数的元素个数 $w$。 

那么区间 $[i,j]$ 对整个序列的贡献是 $c(i,j) \times (xy+zw+2zy+2xw)$。

这个贡献可以代表所有包含 $[i,j]$ 且端点等于 $a_i$ 的区间,在 $[i,j]$ 这一段产生的贡献和。

容易证明极小有效区间数是 $\mathcal{O}(n)$ 的,所以总时间复杂度是 $\mathcal{O}(n \log n)$。

标签:...,le,题解,牛客,108,text,等于,区间,2k
From: https://www.cnblogs.com/HZSPZCR/p/18636794

相关文章

  • 题解 - 买玩具
    题目描述玩具店有个活动,买2个送1个:3个玩具只要付较贵的2个玩具的钱就可以了。举个例子:10324649,如果这样组合(10,3,2),(4,6,4),(9),就在第一个括号中省下2元,第二个括号中省下4元,但第三个括号不能省了,因为只有一个玩具。小星星是个懂事的孩子,他想尽可能的为家......
  • [题解]P1333 瑞瑞的木棍
    P1333瑞瑞的木棍我们将颜色看作节点,每个木棍左右的两个颜色之间连接无向边。可以用并查集维护连通性,每添加一条边\((u,v)\)就合并\(u,v\)所在集合,最终所有节点都在一个集合中\(\iff\)该图联通。在回顾下无向图存在欧拉通路的判定条件,满足其一即可:无向图是欧拉图\(\iff\)非零......
  • Centos7下yum安装报错问题解决方法Cannot find a valid baseurl for repo: base/7/x86
    Cannotfindavalidbaseurlforrepo:base/7/x86_64 目录Cannotfindavalidbaseurlforrepo:base/7/x86_64 原因如下:1.网络问题2.错误的YUM源配置3.代理设置问题 原因如下:1.网络问题首先,检查系统的网络连接是否正常,可以通过以下命令测试:ping......
  • [题解]UVA10129 单词 Play on Words
    UVA10129单词PlayonWords将各字母看做节点,单词的首字母向尾字母连一条有向边。最终如果该图存在欧拉通路,则答案合法。回顾一下欧拉通路的判定:有向图是欧拉图\(\iff\)非零度节点弱连通,每个节点出入度相等有向图是半欧拉图\(\iff\)非零度节点弱连通,恰有一个节点出度\(-\)入......
  • 【递归与回溯深度解析:经典题解精讲(下篇)】—— Leetcode
    文章目录有效的数独解数独单词搜索黄金矿工不同的路径|||有效的数独递归解法思路将每个数独的格子视为一个任务,依次检查每个格子是否合法。如果当前格子中的数字违反了数独规则(在行、列或3×3小方块中重复),直接返回False。递归检查下一个格子,直到所有格子都检......
  • ZZULIOJ 1108: 打印数字图形(函数专题)
    题目描述:        从键盘输入一个整数n(1≤n≤9),打印出指定的数字图形。要求在程序中定义并调用如下函数:PrintSpace(m)用来输出m个空格;PrintDigit(m)来输出一行中的数字串"12...m...21"(该行中的最大数字是m)。函数原型如下:voidPrintDigit(intm);   voidPrintSp......
  • Pycharm 2024.3 安装详细教程与激活方法(附常见问题解决)
    Pycharm概述Pycharm是JetBrains公司推出的一款功能强大的Python集成开发环境(IDE),凭借其丰富的功能和工具集,极大地提升了开发者的编程效率和工作体验。温馨提示:本文中的方法仅供学习交流使用,如果条件允许,请支持正版软件。删除旧版本Pycharm如果您的电脑中已经安装了旧版本的......
  • 机器分配(assigned) 题解
    题目在主页include<bits/stdc++.h>usingnamespacestd;inta[15][25],f[15][25];voiddg(intdep,intmax,intrest){if(dep==0)return;inti;for(i=0;i<=rest;i++)if(max==f[dep-1][i]+a[dep][rest-i])break;dg(dep-1,f[dep-1][i]......
  • leetcode热题100(48. 旋转图像)简单清晰题解c++
    给定一个 n × n 的二维矩阵 matrix 表示一个图像。请你将图像顺时针旋转90度。你必须在 原地 旋转图像,这意味着你需要直接修改输入的二维矩阵。请不要 使用另一个矩阵来旋转图像。示例1:输入:matrix=[[1,2,3],[4,5,6],[7,8,9]]输出:[[7,4,1],[8,5,2],[9,6,3......
  • 题解:CF2051C Preparing for the Exam
    CF2051CPreparingfortheExam思路其实莫非就三种情况:所有题目都会:所有试卷也都会。有\(\ge2\)道题目不会:所有试卷都不会。有\(1\)道题目不会:假设这道题目是\(x\),那么遍历数组\(q\)寻找是否有\(q_i=x\),如果有则输出\(1\),否者输出\(0\)。AC代码时间复杂度为......