首页 > 其他分享 >Public NOIP Round #7

Public NOIP Round #7

时间:2024-10-23 11:49:10浏览次数:5  
标签:子树 NOIP limits min sum Round ge 复杂度 Public

A

答案为 \(\sum\limits_{k \ge 0} \sum\limits_{i = 1}^n \sum\limits_{j = 1}^n [a_i + b_j \ge 10^k]\)。先把 \(a, b\) 排序,枚举 \(k\) 后双指针统计答案即可。时间复杂度 \(O(n (\log n + \log V))\)。

B

若 \(|a_i - a_j| = k\) 就在它们之间连一条无向边。因为保证序列没有相同元素所以图是若干条链。

容斥,相当于断开若干条边,然后把剩下的链拼接在一起,其中长度 \(\ge 2\) 的链要乘一个 \(2\) 的系数(顺序正着或者反着均可)。预处理出长度为 \(i\) 的链断成 \(j\) 条链的贡献系数,最后直接 DP 即可。

时间复杂度 \(O(n^2)\)。

C

考虑固定了 \(w, b\) 如何算 \(f(w, b)\)。不失一般性假设 \(w \ge b\)。

设 \(S\) 为必须是白色的点(其所有子树大小均 \(< w\)),分类讨论。

  • 若 \(S \ne \varnothing\),把 \(S\) 中的点删除后黑点只能在其中一棵子树内,\(f(w, b)\) 为大小 \(\ge b\) 的子树个数。
  • 若 \(S = \varnothing\),\(f(w, b)\) 只能为 \(1\) 或 \(2\)。\(f(w, b) = 1\) 当且仅当存在一个点,它有两棵子树 \(\ge w\),另外还有一棵子树 \(\ge b\)。感性理解一下,若这个条件不满足那么黑色连通块相当于被白色连通块堵住了,要么在它前面要么在它后面,不可能跨过它,所以等价类数量为 \(2\)。

得到这个结论后计算答案是简单的。仍然分两类讨论。

  • 若 \(S \ne \varnothing\),从大到小枚举 \(w\),并查集维护删除 \(S\) 后各个连通块的大小。线段树维护 \(\sum\limits b \times f(w, b)\) 即可。
  • 若 \(S = \varnothing\),我们预处理出每个点前三大的子树大小,然后算出第二大子树大小 \(\ge w\) 时第三大子树大小的最大值 \(t\)。那么 \(b \in [1, \min(t, w)]\) 时 \(f(w, b) = 1\),\(b \in [\min(t, w) + 1, w]\) 时 \(f(w, b) = 2\)。

这样只计算了 \(\sum\limits_{w = 1}^{n - 1} \sum\limits_{b = 1}^{\min(w, n - w)} w \times b \times f(w, b)\),把答案乘 \(2\),最后减去 \(\sum\limits_{i = 1}^n i^2 f(i, i)\) 即可。

时间复杂度 \(O(n \log n)\)。

D

考虑 \(a_i \le 10\) 的部分分。

拆贡献,转 \(01\),枚举一个 \(p\),令 \(b'_i = [b_i \ge p]\),把所有 \(p\) 的情况的 \(1\) 的个数求和即可。

差分,转化为计算 \(\sum\limits_{i = 1}^x a_i\)。

发现只有 \(01\) 的冒泡排序过程是非常好看的,大致形如每个 \(0\) 每轮都会往前移一格。所以我们不妨统计 \(0\) 的个数和。发现这个就是 \([l, \min(l + x + k - 1, r)]\) 中 \(0\) 的个数对 \(x\) 取 \(\min\)。

这个是很好用主席树算的。大概就是求出区间中第 \(r - l + 2 - x\) 大的数,设其为 \(t\),那么 \(p \le t\) 时贡献为区间 \(0\) 的个数(这个等于 \(\sum\limits_{i = l}^r \max(t - a_i, 0)\),可以主席树计算),\(p > t\) 时贡献为区间长度。

时间复杂度 \(O(n \log n)\)。

标签:子树,NOIP,limits,min,sum,Round,ge,复杂度,Public
From: https://www.cnblogs.com/zltzlt-blog/p/18496072

相关文章

  • Codeforces Round 966 (Div. 3) A - G
    linkvp赛时过了ABD,CE没做出来,唐完了eee感觉自己真的可以退役了A-PrimaryTaskB-SeatinginaBusC-NumericStringTemplate这题很简单,开两个map扫一遍就可以了,但是赛时我只开了一个,然后居然没调出来qwq,降智D-RightLeftWrong很显然的贪心,最左边配对......
  • 题解 [NOIP2022] 建造军营
    树形\(dp\)好题。观察题目发现,如果B国袭击后,导致A国两个军营不联通,那么B国袭击的一定是一条割边,反之,如果袭击的不是割边,那么不会导致任何影响。所以先进行边双缩点,变成一棵树,记每个联通块(缩完后)内的点数为\(wa\),边数为\(wb\),不妨先考虑对于树的情况如何处理。将问题进行转......
  • 【C++-NOIP篇-4】 [NOIP2007 普及组] 纪念品分组
    文章目录[NOIP2007普及组]纪念品分组题目背景题目描述输入格式输出格式样例#1样例输入#1样例输出#1提示题目思路完整Code[NOIP2007普及组]纪念品分组题目背景NOIP2007普及组T2题目描述元旦快到了,校学生会让乐乐负责新年晚会的纪念品发放工作。为使得参......
  • EPIC Institute of Technology Round Summer 2024 (Div. 1 + Div. 2) E. Wonderful Tr
    题目链接EPICInstituteofTechnologyRoundSummer2024(Div.1+Div.2)E.WonderfulTree!思路题目要求令所有的av≤......
  • Codeforces Round 980 (Div. 2) C题
    sort用法Sort(start,end,cmp)voidsort(RandomAccessIteratorfirst,RandomAccessIteratorlast,Comparecomp);参数[5](1)start表示要排序数组的起始地址;迭代器的起始位置,对于数组来说就是数组的首地址,一般写上数组名就可以,因为数组名是一个指针常量。(2)end表示数组结束地......
  • 题解:P11207 「Cfz Round 9」Rose
    可以考虑把字符串\(s\),\(t\)按\(s_1t_1s_2t_2\dotss_nt_n\)拼接,记为\(a\)。为了方便表述,这里分别把PVW表示为012。Subtask0我会暴力!可以直接在\(a\)上进行dfs,复杂度为\(O(3^{2n})\)。Subtask1我会找性质!注意到答案只有可能是\(0,1,2\),因为在最坏情况下,只......
  • 题解:P11204 「Cfz Round 9」Lone
    首先可以观察出把木棍平均分是最优的。然后平均分后最多只有两种长度的木棒,长度分别为\(\lfloor\frac{m}{n}\rfloor\)和\(\lfloor\frac{m}{n}\rfloor+1\)。最后check一下就行了。代码:#include<bits/stdc++.h>usingnamespacestd;#defineintlonglong#define......
  • 【NOIP2021】方差 题解
    前言题目链接:洛谷;LOJ;UOJ。题意简述给你单调不降序列\(\{a_n\}\),你可以让\(a_i\getsa_{i-1}+a_{i+1}-a_i\),求操作后方差的最小值。\(n\leq10^4\),\(1\leqa_i\leq600\)。题目分析仔细观察操作,发现实际上是将\(a_i\)按照\(a_{i-1}\)和\(a_{i+1}\)的......
  • [题解]P2671 [NOIP2015 普及组] 求和
    P2671[NOIP2015普及组]求和可以发现我们对相同颜色且编号奇偶性相同的元素归为一组,组内的元素两两都满足题目条件,且这样可以不重不漏覆盖所有答案。设分完组之后,某一组内的元素编号分别是\(a_1,a_2,\dots,a_q\),数字分别是\(b_1,b_2,\dots,b_q\),则根据题意,该组的答案是:\[\lar......
  • NOIP2024集训Day58 字符串
    NOIP2024集训Day58字符串C.[CEOI2011]Matching发现要做的是排名串的匹配。考虑把它转成这个位置之前有多少个数小于当前这个数,这样就只要每个位置都对应相等的,那就一定是合法的。然后就可以类似KMP的预处理出一个\(nxt\)数组,然后再类似KMP的匹配。因为需要支持动态......