首页 > 其他分享 >CTT2022

CTT2022

时间:2024-09-30 16:15:44浏览次数:6  
标签:right CTT2022 limits dfrac sum oplus left

D1T1 区间计数

记 \(S([l,r])\) 表示可重集合 \(\{a_{l},a_{l+1}\dots a_{r}\}\)

考虑统计有哪些区间是重复贡献的,也就是统计所有的区间 \([l,r]\),使得存在区间 \([l',r']\),满足 \(l'<l\) 且 \(S([l',r'])=S([l,r])\)。

那先显然有两种情况:\(r'<l\) 以及 \(r'\ge l\)。

对于第一种情况,显然 \([l,r]\) 中的每一个数都是 \([l',r']\) 中的数的第二次出现,对于每一个数,维护其前一次出现的时刻 \(b_i\)(如果不存在则构造一些必然使得其不合法的 \(b_i\))。

记 \(bl(l,r)=\min\limits_{i=l}^rb_i\),\(br(l,r)=\max\limits_{i=l}^rb_i\)。对于所有区间,有 \(br(l,r)-bl(l,r)\ge r-l\);同时对于满足第一种情况的数,显然有 \(br(l,r)-bl(l,r)=r-l\)。

让 \(l\) 从小到大扫描,第 \(r\) 位维护 \(br(l,r)-bl(l,r)-(r-l)\),那么就是查询序列的最小值是多少以及由多少数为最小值。考虑 \(br(l,r)\) 和 \(bl(l,r)\) 可以使用单调栈维护,每一次弹出的时候的修改可以被认为是区间加操作,所以修改操作的总次数是 \(O(n)\) 的。

对于第二种情况,也就是 \(r'\ge l\),由于有 \(S([l',r'])=S([l,r])\),可以得到 \(S([l',l-1])=S([r'+1,r])\),那么此时 \(l-1<r'+1\),这就对应了上面的第一种情况。发现每一个情况一都会对应一个情况二,但是多个情况一可能会对应同一个情况二,所以如何维护。对于所有对应同一个情况二的情况一,它们的 \(r\) 和 \(br(l,r)\) 是相同的。也就是在前面的维护中,每当某一个 \(r\) 位置对第二种情况做出了贡献之后,我们给它打上标记,直到这个位置的 \(br(l,r)\) 变化之后,才让其能够再次可能对答案做出贡献。

但是,这两种情况可能会有重合。通过讨论,发现重合的情况就是 \([l',r']=[2l-r-1,l-1]\) 的情况,也就是要求 \(br(l,r)=l-1\)。满足这个条件的 \(r\) 构成一段区间,位置可以通过在单调栈上二分得到,然后在线段树上进行区间查询即可。

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

D1T2 一眼丁真

不是很会做,写了一个 40 分做法。

这个多边形的中心可以被大致认为是所有点的代数均值,然后考察所有点到中心的平均距离,如果是正 \(n\) 多边形,其应该等于 \(\bar{r}_n=\dfrac{\cos(\frac{\pi}{n})\ln(\sec(\frac{pi}{x})+\tan(\frac{pi}{x}))n}{\pi}\)。找到最接近的那个多边形即可。

发现在 \(n\) 较大的时候 \(\bar{r}_n\) 的值比较接近,所以受扰动影响大。

D1T3 白兔迷宫

发现带环的期望问题,尝试列出方程高斯消元。先去掉某一些奇奇怪怪的特殊情况,例如以 \(T\) 为入点的边。

记 \(f_i\) 表示从 \(S\) 走到 \(i\) 点的期望次数(期望分数的零次方,规定 \(0^0=1\)),\(g_i\) 表示从 \(S\) 走到 \(i\) 时的期望分数,\(h_i\) 表示从 \(S\) 走到 \(i\) 时的分数的平方的期望。

记 \(d_i\) 表示 \(i\) 点的出边数量。有 \(f_v=\sum\limits_{(u,v,o)\in E}\dfrac{1}{d_u}f_u\),\(g_v=\sum\limits_{(u,v,1)\in E}\dfrac{1}{d_u}(g_u+f_u)\),\(h_v=\sum\limits_{(u,v,1)\in E}\dfrac{1}{d_u}(h_u+2g_u+f_u)\)。

发现这个一个 \(3n\) 元一次方程组,可以直接高斯消元,时间复杂度 \(O(n^3)\)。

D2T1 报复社会

发现所有非叶子节点的颜色是不重要的,因为他必然不会作为最后删除的那个节点。

首先考虑策略,Alice 一定会尽可能地删掉 \(1\),Bob 一定会尽可能地删掉 \(0\)。

发现有一档部分分是双层菊花,所以我们先来考虑某一个菊花:当有一个人删掉菊花的根之后,接下来操作的一定可以是 Alice 和 Bob 交替删掉这个菊花里的所有 \(1\) 和 \(0\),直到只剩下一种颜色。

如果剩下的 \(1\),除非没有点可以删,Bob 一定不会去删这些叶子,所以这个点是对 Bob 有利的,同时这个点也是对 Alice 不利的。

考虑如果 Alice 不去主动删掉这个节点,那么由于这个点对于 Bob 有利,他完全可以将其放任不管,如果到最后 Bob 迫不得已删这个节点,说明其他节点已经没有他一定要删的了,所以 Bob 已经建立了优势,这个菊花对于 Bob 来说只会增加优势。所以如果这个菊花,Alice 想要留给 Bob 删,对于 Alice 来说是不优的。那么这个菊花的根对于 Alice 和 Bob 的决策来说是如下的:Alice 会去主动删掉这个节点,但是 Bob 不会。那么发现,这就等价于这个节点的颜色就 \(1\)。

总结一下,如果某一个菊花的叶子中 \(1\) 比 \(0\) 多,我们可以把这个节点的颜色变成 \(1\),然后将其的所有儿子变成它的兄弟。\(0\) 比 \(1\) 多的情况同理。

那么现在唯一的特殊情况就是 \(0\) 和 \(1\) 的数量相等。发现在这种情况下,谁删掉这个节点谁不优。由于 \(0\) 和 \(1\) 的数量相同,也就是这个节点的叶子数量必然是偶数,那么谁会删掉这个节点只会和 \(n\) 有关,那么颜色也就确定了。

直接从叶子到根一直处理,时间复杂度 \(O(n)\)。

D2T2 赫露艾斯塔

考虑分成两个部分维护,一部分是被扫过的点,一部分是还没有被扫过的点。

对于扫过的点,它们必然分布在一个从左上角到右下角的阶梯上,每一次修改都是将阶梯的某一部分向上或者向右推,是可以用数据结构维护的。同时可以在每一次修改的时候看有没有新的原本没有被扫过的点变成被扫过的点。

现在考虑询问,如果这个询问在阶梯的下方,显然是没有意义的,答案一定为 \(0\)。

否则,被扫过过的点中在范围内的必然是一段区间,是容易统计出数量的,而对于没有被扫过的部分,我们考虑容斥,其等于 \(\text{所有未被扫过过的点}-\text{在上方的未被扫过的点}-\text{在右侧的未被扫过的点}+\text{有右上角的未被扫过的点}\),发现第一部分可以直接存储下来,第二部分和第三部分必然是这个范围内的所有未被扫过的点,可以在修改的时候实时维护。对于第四部分,这一部分和阶梯没有交,所以相当于直接询问初始时这个范围有多少个点,可以进行一次离线二维数点来处理。

D2T3 树据结构

由于所有的叶子层数相同,所以每一层的节点数量是单调递增的,而总节点的数量又只有 \(n\) 个,那么本质不同的节点数的数量只有 \(O(\sqrt{n})\) 个。我们考虑对于每一层单独处理。

那么发现,我们要维护的操作就变成了如下的:给出一个矩形,进行矩形加和循环移位的操作。

考虑将矩形加变成二维差分,然后将矩形拼成一行,那么二维差分就变成了先做一次 \(a_i\gets a_{i-1}\),然后做一次 \(a_o\gets a_{i-len}\),其中 \(len\) 是矩形的宽度。那么循环移位就是将数组向后平移一位即可。发现这个所有操作都可以 \(O(1)\) 处理出来,最后 \(O(n+q)\) 求解。

那么最终的时间复杂度即为 \(O((n+q)\sqrt{n})\)。

D3T1 澡堂

发现按照 \(t_i\) 排序之后,第 \(i\) 个人可以被认为一定进入 \(i-m\) 进入的澡堂。我们把所有 \(t_i\) 按照 \(\bmod m\) 的余数分开,就可以把问题变成 \(m=1\) 的问题了,所以我们先考虑 \(m=1\) 的情况。

通过将时间偏移,令 \(a_i=t_i-Ti\),使得每一个人洗澡的时间变成 \(0\) 分钟,那么最终答案就是 \(\sum\limits_{i=1}^n\left(\max\limits_{j=1}^ia_j-a_i\right)=\sum\limits_{i=1}^n\max\limits_{j=1}^ia_j-\sum\limits_{i=1}^na_i\)。其中 \(\sum\limits_{i=1}^na_i\) 是容易维护的,现在只需要考虑 \(\sum\limits_{i=1}^n\max\limits_{j=1}^ia_j\),也就是求序列的前缀最大值序列和。

这是一个经典的楼房重建问题,容易使用线段树或者平衡树做到单次 \(O(\log^2n)\)。那么在原题上,发现把 \(t_x\) 修改了之后,对于每一个数所属于的余数会变化。具体地,如果在 \(t_x\) 修改后的值应当插入第 \(x'\) 个数的前面,那么 \(x'\) 和 \(x\) 这一段会有一个循环移位。使用平衡树维护可以做到 \(O((n+qm)\log^2n)\),难以通过。

发现题目中每一个修改是独立的,所以考虑使用一些更快的方法,例如倍增。

对于每一个 \(a_i\),我们维护其后面第一个比它大的数 \(j\),以及 \(a_i\) 对于到 \(a_j\) 之前这一段的贡献 \(a_i(j-i)\)。然后使用倍增数组拓展到 \(2^k\)。

那么如果要处理 \(a\) 上一段 \([l,r]\) 的信息,我们只需要直到 \([1,l-1]\) 的最大值 \(X\),就可以通过倍增处理出这一段的前缀最大值之和以及新的最大值 \(X'\)。单词的复杂度是 \(O(\log n)\) 的。

发现将 \(x\) 位的数删除,然后再 \(x'\) 之前加入一个数,每一格澡堂的人都会被分成三段。具体的,对于 \(x'<x\) 的情况,会是 \([1,x')\) 中的 \(r\),接上 \([x',x)\) 中的 \(r-1\),接上 \((x,n]\) 中的 \(r\)。注意到,对于 \(r=0\),在第一段和第二段的衔接处,这两个数减少的 \(Ti\) 是相同的,也就是说,需要对其中的元素进行一个 \(\pm T\) 的偏移,这个是可以直接修改的。\(x<x'\) 的情况同理。

最终时间复杂度 \(O((n+mq)\log n)\)。

D3T2 解密游戏

D3T3 士兵游戏

考虑对于每一条边,维护会有多少条路径经过它,也就是要求对于每一个数 \(x>1\),\([1,n]\) 中有多少个数在 \(x\) 的子树内。

对于树的构造进行分析之后,得到就是要处理如下问题:已知 \(x\) 的最大质因子为 \(p\),那么就是问 \([1,\left\lfloor\dfrac{n}{x}\right\rfloor]\) 中有多少个数的所有质因子均 \(\le p\)。

记 \(S(i,j)\) 表示 \([1,i]\) 中,有多少个数只含有前 \(j\) 个质因子。发现所有的选区间都是 \([1,\left\lfloor\dfrac{n}{x}\right\rfloor]\),根据整除分块的经典结论,我们需要关注的 \(i\) 的数量只有 \(O(\sqrt{n})\) 个。

容易得到转移式子 \(S(i,j)=S(i,j-1)+S(\left\lfloor\dfrac{i}{p_j}\right\rfloor,j)\)。

那么我们最终要求的就是 \(\sum\limits_{x=2}^nf(S(\left\lfloor\dfrac{n}{x}\right\rfloor,\operatorname{maxp}(x)))\)。其中 \(f(x)=x(n-x)\),\(\operatorname{maxp}(x)\) 表示 \(x\) 的最大质因子是第几大质因子。

考虑枚举 \(d=\left\lfloor\dfrac{n}{x}\right\rfloor\),满足的 \(x\) 在区间 \([l,r]\)。

那么答案就变成了 \(\sum\limits_{d}\sum\limits_{i}f(S(d,i))\sum\limits_{x=l}^r[\operatorname{maxp}(x)=i]\)

考虑如何求 \(\sum\limits_{x=l}^r[\operatorname{maxp}(x)=i]\)。记 \(T(i,j)\) 表示 \([1,i]\) 中,有多少个数不含有前 \(j\) 个质因子。仍然根据整除分块的结论,著需要关注 \(O(\sqrt{n})\) 个 \(i\)。

\(T(i,j)\) 有转移式 \(T(i,j)=T(i,j-1)-T(\left\lfloor\dfrac{i}{p_j}\right\rfloor,j-1)\)。

那么可以得到 \(\sum\limits_{x=l}^r[\operatorname{maxp}(x)=i]=T(\left\lfloor\dfrac{r}{p_i}\right\rfloor,i-1)-T(\left\lfloor\dfrac{l-1}{p_i}\right\rfloor,i-1)\)。

所有 \(\ge \sqrt{n}\) 的质数都可以单独处理。

外层枚举质数 \(p_i\),内层枚举 \(d\),可以做到 \(O(n^{1-\epsilon})\) 的复杂度。发现这个东西和 min25 筛长得很想,所以尝试将其复杂度优化到 \(O(\dfrac{n^{\frac{3}{4}}}{\log n})\)。

我们对 \(T(i,j)\) 的含义进行修改:\([1,i]\) 中,有多少个数不含有前 \(j\) 个质因子或是质数。这样,在从 \(j\) 转移到 \(j+1\) 的时候,只有 \(i\ge p_j^2\) 的部分 \(T(i,j)\) 相较于 \(T(i,j-1)\) 才会有变化,所以只需要转移这一部分,但是转移式会有变化。

观察到求值的时候,除了 \(p_i\) 之外的,所有数都 \(\ge p_i^2\),那么需要的 \(S\) 也只有 \(\le \left\lfloor\dfrac{n}{p_i^2}\right\rfloor\) 的部分。

然后对于那些质数,单独求出那 \(\sqrt{n}\) 个值就可以了,可以使用类似 min25 的那一种搜索。这样复杂度是 \(O(\dfrac{n^{\frac{3}{4}}}{\log n})\)。

D4T1 一般路过串串题

我们先拆式子,我们记 \(S[l:r]\) 在 \(T\) 中的出现次数为 \(g(l,r)\),\(S(n)=\sum\limits_{i=1}^nS(i)\),\(S'(n)=\sum\limits_{i=1}^nS(i)\)。

\[\begin{aligned} \sum\limits_{(l,r)}f(l,r)(r-l+1)^2&=\sum\limits_{(l,r)}\left(\sum\limits_{(x,y)\subseteq(l,r)}g(x,y)\right)(r-l+1)^2\\ &=\sum\limits_{(x,y)}g(x,y)\sum\limits_{(x,y)\subseteq(l,r)}(r-l+1)^2\\ &=\sum\limits_{(x,y)}g(x,y)\sum\limits_{y\le r\le n}\sum\limits_{0\le l<x}(r-l)^2\\ &=\sum\limits_{(x,y)}g(x,y)\sum\limits_{y\le r\le n}\left(S(r)-S(r-x)\right)\\ &=\sum\limits_{(x,y)}g(x,y)\left(\sum\limits_{y\le r\le n}S(r)-\sum\limits_{y\le r\le n}S(r-x)\right)\\ &=\sum\limits_{(x,y)}g(x,y)\left(S'(n)-S'(y-1)-S'(n-x)+S'(y-x-1)\right) \end{aligned}\]

发现 \(S'(n)\),\(S'(y-1)\),\(S'(n-x)\),\(S'(y-x-1)=S'(len-2)\),都是可以在 SAM 上维护的,时间复杂度 \(O(n|\Sigma|)\)。

D4T2 排列

会与 \(b=1\),发现 \(x_2=x_0\oplus f_1(x_1)\),\(x_3=x_1\oplus f_2(x_2)\),\(x_4=x_2\oplus f_3(x_3)\)。

所以有 \(x_2=x_0\oplus f_1(x_1)=x_4\oplus f_3(x_3)\),以及 \(f_2(x_2)=x_1\oplus x_3\)。

我们随机一对 \(x_0\) 和 \(x_1\) 得到其对应的 \(x_3\) 和 \(x_4\)。然后随机一个数 \(\Delta\)。

令 \(y_0=x_0\oplus \Delta\),\(y_1=x_1\),用其计算 \(y_3,y_4\)。令 \(z_3=x_3\),\(z_4=x_4\oplus \Delta\)。

那么不难得到 \(y_2=y_0\oplus f_1(y_1)=x_0\oplus \Delta\oplus f_1(x_1)=x_4\oplus \Delta f_3(x_3)=z_4\oplus f_3(z_3)=z_2\)。

那么 \(y_1\oplus y_3=f_2(y_2)=f_2(z_2)=z_1\oplus z_3\)。我们只需要检验 \(y_1\oplus y_3\) 是否等于 \(z_1\oplus z_3\) 即可。

对于 \(b=0\),可以认为是完全随机的,满足上述条件的概率为 \(2^{-64}\),所以可以直接判断即可。

D4T3 欧拉?欧拉!

标签:right,CTT2022,limits,dfrac,sum,oplus,left
From: https://www.cnblogs.com/Xun-Xiaoyao/p/18429307

相关文章

  • CTT2022 解题报告
    因为摇奖想看博客,所以这篇文章发出来了!CTT2022解题报告场切题数在Day4突破了0,可喜可贺!D1T1区间计数一个简单的想法是计算【有多少个区间满足它和某个比它更左的区......
  • CTT2022游记DAY3
    考试安排8.30~9.10T2是交互,看起来很好玩。T3是数论,T1不会。9.10~9.30T3的45看起来很好,就是空间有点卡,拆了一下贡献就够用了。9.30~10.40想了个\(n^2\)的做法,但是只......
  • CTT2022总结 DAY1
    感觉vscode不太舒服。时间规划8.30~8.50看了一遍题,T1T3是常规题,T2很怪异。先交了个T1的暴力20pts8.50~9.20先想了想T2的前两档,画了画图发现可以用最远点对算。求了......
  • 百度之星 2022 & CTT2022 游记
    百度之星Day0入住酒店,杭州不愧是支付宝大本营,微信扫码一败涂地,只能使用支付宝。酒店电梯向上运行到6楼左右掉了半楼,非常恐怖,赶紧下了电梯。看了看知乎去年的Astar......